消息:通过Selenium和Python尝试单击复选框时元素不可见
我正在尝试自动化我一直在工作的项目的一部分。 项目的这一部分应该进入一个页面并获得一个随机生成的密钥。 要获取密钥,它会进入网页,登录,然后按一些按钮获取新密钥。 我一直在使用Selenium和Chrome驱动程序来实现这一点消息:通过Selenium和Python尝试单击复选框时元素不可见,python,selenium,selenium-webdriver,xpath,css-selectors,Python,Selenium,Selenium Webdriver,Xpath,Css Selectors,我正在尝试自动化我一直在工作的项目的一部分。 项目的这一部分应该进入一个页面并获得一个随机生成的密钥。 要获取密钥,它会进入网页,登录,然后按一些按钮获取新密钥。 我一直在使用Selenium和Chrome驱动程序来实现这一点 driver = webdriver.Chrome() 当我必须勾选一些复选框时,问题就开始了 这是页面的外观: 源文件看起来像它的JavaScript呈现 到目前为止,我所尝试的: 通过id获取: checkbox = label.find_element_by_i
driver = webdriver.Chrome()
当我必须勾选一些复选框时,问题就开始了
这是页面的外观:
源文件看起来像它的JavaScript呈现
到目前为止,我所尝试的:
通过id获取:
checkbox = label.find_element_by_id("agreed")
checkbox.click()
通过XPath获取它:
checkbox = driver.find_element_by_xpath('//*[@id="agreed"]')
他们都给了我:
Message: element not visible
我也尝试过等待它可见,但它只是等待,最终给出以下结果:
checkbox = WebDriverWait(driver, 3).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="agreed"]')))
checkbox.click()
输出:
Message:
您应该在控制台中检查该id是否只返回一个元素或多个元素。 有时,DOM中存在多个相同id或选择器的元素。 一个是隐藏的,一个是可见的。你必须找到一个可见的并点击它。 还要检查iframe中是否不存在该元素 在控制台中,写以下行以查看此id的元素数:
$x("//*[@id='agreed']")
希望对您有所帮助。要单击与文本为的元素相关联的复选框,我同意API服务协议而不是调用元素的可见性()
CSS\u选择器
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "label[for='agreed']"))).click()
XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@for='agreed']"))).click()
始终记住使用驱动程序。隐式地等待(X)
,其中X是在找不到元素时使驱动程序自动重试的秒数。除了浏览器自动化之外,您是否尝试过捕获请求?在类似的情况下,我使用会话中的cookies成功地自动化了post请求。如果您运气不好,并且在一段时间后出现会话超时,您可以使用selenium脚本更新Cookie并继续自动请求。我已经检查了是否有其他元素与jqury具有相同的id,除此之外没有其他元素。还检查了jframes,我们没有anyLet。我刚刚尝试了你的方法,效果很好,谢谢!很好的回答和解释。我将在以后研究这个方法。也许这会更好,因为硒有点慢。谢谢你的提示!两周前,我编写了一个类似的数据收集脚本。通过复制请求而不是浏览器模拟,您将看到巨大的速度提升。之后,如果您的需求太高,开始尝试多线程处理您的请求。我设法每秒收到8封回复,但这是服务器问题。如果服务器能够用ie 25线程处理负载,并且能够稳定地使用它。