单击带有 selenium-webdriver 的复选框

问题描述 投票:0回答:4

我正在使用 tumblr 测试我的应用程序,在执行程序时我必须登录和退出。这样做时,我无法单击不断弹出的复选框。如何在python中使用selenium-webriver来点击它?

我尝试过选择 xpaths、...by_ids 和 by_classes,它们不起作用,所以现在我尝试使用鼠标的坐标来物理单击该项目。 (这是在 tumblr 登录页面上,仅供参考)

上面是我要选择的项目的 html。

(编辑:) 我有以下选择器:

#checkbox = driver.find_element_by_id("recaptcha-anchor")
#checkbox = driver.find_element_by_id("g-recaptcha") 
#driver.find_element_by_xpath("//*[@id='recaptcha-token']")
#driver.find_element_by_css_selector("#recaptcha-anchor")
#driver.find_element_by_xpath("//*[@id='recaptcha-anchor']")
#driver.find_element_by_id("recaptcha-token").click()
#driver.find_element_by_class_name('rc-anchor-center-container')
#checkbox = driver.find_element_by_id("recaptcha-anchor")
python python-3.x selenium tumblr webautomation
4个回答
7
投票

Google reCaptcha 是一个 iframe,因此您不能直接使用选择器。相反,请在 reCaptcha 之前选择一个元素,然后使用

send_keys
tab 到复选框,然后使用 space 勾选它。例如,请参阅下面最后一行代码。

注意:这会勾选验证码框,但不会解决问题,您仍然需要手动执行此操作。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

#modify line below to location of your chromedriver executable
chrome_path = r"/Users/Username/chromedriver"
driver = webdriver.Chrome(chrome_path)
driver.get("https://www.btcmarkets.net/login")

username = driver.find_element_by_id("userIdText")
username.send_keys("Us3rn4me")

password = driver.find_element_by_id("userPasswordText")
password.send_keys("Pa55w0rD")

#the line below tabs to the recaptcha tickbox and ticks it with the space bar
password.send_keys(Keys.TAB + Keys.TAB + " ")

0
投票

看起来这不是一个输入标签。因此,可能操纵

aria-checked
属性并将其设置为
true
就可以了。更改属性值的唯一方法是 JavaScriptExecutor。尝试以下操作:

driver.execute_script("$('#recaptcha-anchor').setAttribute('aria-checked','true');")

0
投票

使用下面的代码可以找到id为“recaptcha-anchor”的复选框并单击它,但无法绕过它。将会弹出以下图片。

List<WebElement> frames = driver.findElements(By.tagName("iframe"));
    String winHanaleBefore = driver.getWindowHandle();
    driver.switchTo().frame(0);
driver.findElement(By.id("recaptcha-anchor")).click();
driver.switchTo().window(winHanaleBefore);

-3
投票

这是一个在 Java 中适用于我的简单示例:

driver.findElement(By.id("checkbox_id")).click();

在Python中,似乎是:

driver.find_element_by_id("checkbox_id").click()
© www.soinside.com 2019 - 2024. All rights reserved.