我正在尝试https://www.ecobolsa.com/index.html在 python3中使用 Selenium登录,但是 send_keys 函数给了我消息:
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
(Session info: headless chrome=78.0.3904.97)
Run Code Online (Sandbox Code Playgroud)
代码是:
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
email = 'fake@gmail.com'
password = 'fakepass3'
driver = webdriver.Chrome('chromedriver', options=options)
driver.get('https://www.ecobolsa.com/index.html')
driver.find_element_by_id("userNameTextBox").send_keys(email)
driver.find_element_by_id("password_login").send_keys(password)
Run Code Online (Sandbox Code Playgroud)
我尝试了其他解决方案,但没有一个成功。我需要帮助。
selenium python-3.x selenium-chromedriver selenium-webdriver webdriverwait
在一个table元素中,我有以下日期选择器:
<input name="tb_date" type="text" value="2020-07-15" onchange="javascript:setTimeout('__doPostBack(\'tb_date\',\'\')', 0)" onkeypress="if (WebForm_TextBoxKeyHandler(event) == false) return false;" id="tb_date" class="align-center" style="font-size:14pt;width:120px;">
Run Code Online (Sandbox Code Playgroud)
我可以按如下方式获取输入元素:
date_element = driver.find_element_by_name('tb_date')
Run Code Online (Sandbox Code Playgroud)
没事儿。但是当我尝试更改此元素的值时,它似乎会附加到当前值。
date_element.send_keys('2020-07-01')
date_element.click()
Run Code Online (Sandbox Code Playgroud)
所以日期选择器的值为'2020-07-152020-07-01'
如何删除 value 属性并输入新的值?
我正在尝试制作一个 selenium instagram 脚本。我的问题是我每次都必须登录我的帐户。
\n如果我使用普通的谷歌浏览器,只需登录一次就足够了。当 \xc4\xb1 打开 Chrome 时,它始终保持登录状态。但 Chrome 驱动程序总是要求登录。
\nfrom selenium import webdriver\nimport time\nimport random\nfrom selenium.webdriver.common.by import By\nimport kullaniciBilgileri as kb\nimport os.path\nfrom pathlib import Path\nfrom selenium.webdriver.chrome.options import Options\nimport collections\n\noptions = Options()\noptions.add_experimental_option('useAutomationExtension', False)\nlink = "http://www.instagram.org"\nbrowser = webdriver.Chrome(options=options, executable_path="./chromedriver")\nbrowser.get(url=link)\ntime.sleep(10)\nusername = browser.find_element(by=By.NAME, value=("username"))\npassword = browser.find_element(by=By.NAME, value=("password"))\nusername.send_keys(kb.userName)\npassword.send_keys(kb.password)\nloginBtn = browser.find_element(by=By.CSS_SELECTOR, value=("#loginForm > div > div:nth-child(3) > button > div"))\n \nloginBtn.click()\nRun Code Online (Sandbox Code Playgroud)\n有什么建议吗?
\n我目前有以下设置,但我不确定我的等待(隐式和 pageLoadTimeout)是否有效。这是正确的实现吗?通过将它放在@Before("@setup") 中,它是否适用于每个场景或步骤定义运行?每次我打电话给@Given、@When.. 等时,司机会相应地等待吗?
@Before("@setup")
public void setUp() {
driver.manage().deleteAllCookies();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
}
Run Code Online (Sandbox Code Playgroud)
为什么需要给下面的wait分配一个WebElement,WebElement元素接收什么?这是正确的实现吗?——
WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(id)));
boolean status = element.isDisplayed();
Run Code Online (Sandbox Code Playgroud) 我想滚动这个使用
actions = ActionChains(browser)
actions.send_keys(Keys.PAGE_DOWN)
actions.perform()
Run Code Online (Sandbox Code Playgroud)
直到它到达滚动的底部,在那里它会找到一个元素“加载更多”
loadMoreButton = browser.find_element_by_css_selector(
".btn.list-view__load-more.list-view__load-more--js")
loadMoreButton.click()
Run Code Online (Sandbox Code Playgroud)
然后庞塞单击加载更多按钮,它必须再次执行滚动操作,然后再次执行加载更多操作,直到加载更多按钮不可用。
我必须使用此页面向下操作,因为在页面滚动到元素之前元素不会加载,如果有人可以提出一些解决方案将有很大帮助
python lazy-loading web-scraping selenium-webdriver webdriverwait
我正在使用 JMeter Webdriver 采样器进行应用程序 UI 响应时间测量。我正面临等待功能的问题。例如,登录页面的加载时间在 10 到 120 秒之间。所以我有以下代码用于 Webdriver 采样器中的登录页面,用于页面加载检查。
var ui=JavaImporter(org.openqa.selenium.support.ui)
var wait=new support_ui.WebDriverWait(WDS.browser,120)
wait.until(ui.ExpectedConditions.visibilityOfElementLocated(pkg.By.className('logout-btn-hover')))
Run Code Online (Sandbox Code Playgroud)
问题是即使在页面完全加载后,JMeter 仍在等待执行下一个操作。如果我减少 120 秒,这个等待时间会减少。但有时应用程序也需要 120 秒才能加载,所以我需要保持 120 秒。
一旦采样器完成其操作,我就会将时间写入日志文件。由于等待时间问题,我无法正确计算时间。
如何解决错误AttributeError: \'NoneType\' object has no attribute \'click\'?它的失败在于self.home.get_you_button().click(). 当我没有创建页面对象类时,它\xe2\x80\x99s 工作正常...它单击“You”按钮,没有任何错误,但通过使用 POM,它\xe2\x80\x99s 失败。网址是https://huew.co/
代码试验:
\n\nfrom selenium.webdriver.support import expected_conditions\nfrom selenium.webdriver.support.wait import WebDriverWait\n\nclass HomePage():\n\n def __init__(self,driver):\n self.driver = driver\n\n def wait_for_home_page_to_load(self):\n wait =WebDriverWait(self.driver,30)\n wait.until(expected_conditions.visibility_of(self.driver.find_element_by_tag_name(\'html\')))\n\n def get_you_button(self):\n\n try:\n element = self.driver.find_element_by_xpath("//div[@class=\'desktop-public-header\']/a[@ng-controller=\'UserNavigationInteractionCtrl\'][6]")\n\n except:\n return None\nRun Code Online (Sandbox Code Playgroud)\n 我尝试结合检查两种情况:
如果启动检查失败,我们会看到重试按钮:
el = WebDriverWait(self.driver, 10).until(
EC.element_to_be_clickable((By.NAME, "Try again")))
Run Code Online (Sandbox Code Playgroud)
或者启动检查成功,我们在自定义对象中收到 pin 输入请求:
el = WebDriverWait(self.driver, 20).until(
EC.element_to_be_clickable((By.XPATH, "//Custom/Edit")))
Run Code Online (Sandbox Code Playgroud)
如何将其合并为一项检查而不必同时检查两者:我尝试了以下方法:
check = WebDriverWait(self.driver, 20).until(
EC.element_to_be_clickable(
(By.XPATH, "//Custom/Edit") or (By.NAME, "Try again")
))
Run Code Online (Sandbox Code Playgroud)
但只or检查第一个语句。
我想,点击按钮通过音频解析验证码,但是selenium没有检测到指定的“id”。
browser.get("https://www.google.com/recaptcha/api2/demo")
mainWin = browser.current_window_handle
iframe = browser.find_elements_by_tag_name("iframe")[0]
browser.switch_to_frame(iframe)
CheckBox = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID ,"recaptcha-anchor"))).click()
sleep(4)
audio = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID ,"recaptcha-audio-button"))).click()
Run Code Online (Sandbox Code Playgroud) 我正在构建一个网络抓取工具,它循环访问地址列表并在房地产网站上搜索它们。然后,它会根据我们已经了解的有关房产的信息更新一些下拉列表,然后再抓取各种信息,例如预期租金收益率。
搜索完每个地址后,可能需要一些时间才能将所需元素(例如“bathrooms_dropdown”)加载到网站上。我一直在使用它来管理它,time.sleep(x)但这很慢且不可靠,并且implictly_wait(60)似乎没有任何效果,因为我仍然经常收到“元素不存在/无法找到”错误。
我确信我需要实现 WebDriverWait,但在将其实现到我的代码中时无法计算出语法。我还没有看到任何与此结合使用的例子driver.find_elements()
任何帮助将不胜感激!
driver.get(url)
driver.implicitly_wait(60)
# find search bar and search for address
searchBar = driver.find_element(by = By.ID, value = 'react-select-3-input')
searchBar.send_keys(address)
searchButton = driver.find_element(By.CLASS_NAME, value='sc-1mx0n6y-0').click()
# wait for elements to load
time.sleep(3) # REPLACE THIS
# find dropdown and click to open it
bathrooms_dropdown = driver.find_elements(By.CLASS_NAME, value = 'css-19bqh2r')[-2]
bathrooms_dropdown.click()
Run Code Online (Sandbox Code Playgroud) python selenium selenium-webdriver webdriverwait expected-condition
webdriverwait ×10
selenium ×8
python ×7
python-3.x ×2
cookies ×1
datepicker ×1
dopostback ×1
iframe ×1
implicitwait ×1
java ×1
jmeter ×1
lazy-loading ×1
pickle ×1
recaptcha ×1
web-scraping ×1
webdriver ×1
xpath ×1