我正在练习使用Selenium编写代码,我在尝试使代码标记条款和条件复选框时遇到了麻烦,但它似乎不起作用。我正在练习的网站是https://www.starbucks.com/account/create
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
elem = driver.find_element(By.ID, "termsAndConditions").click()
我尝试的另一个代码是
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("https://www.starbucks.com/account/create")
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '/html/body/div[2]/div/div[3]/main/div[2]/div/div/form/div/div[1]/div[1]/label/span/span[1]/span/svg'))).click()
这两种方法似乎都不能标记复选框
3条答案
按热度按时间axkjgtzd1#
下面是一种使用xpath的方法
driver.find_element(By.XPATH, '//div[h2[contains(text(), "Terms of Use")]]//label[@class="option option--checkbox"]//span[@class="block option__labelMarker"]').click()
流程说明:
在浏览页面时,我尝试选择并单击以下元素:
'//label[@class="option option--checkbox"]/span'
但是,它点击“是,我想要电子邮件”复选框。这意味着我们需要更具体地说明我们需要哪个复选框:所以
'//div[h2[contains(text(), "Terms of Use")]]//label[@class="option option--checkbox"]'
部分就是这样做的:找到位于“使用条款”标题后的复选框然后我试着点击不同的子元素,其中一个刚刚工作。
不要依赖这些浏览器自动生成的xpath,因为当网站中的某些内容发生更改时,它们往往会中断。尽量坚持使用类名或元素内容。
4jb9z9bj2#
条款和条件复选框被另一个元素阻止,因此调用
click()
不起作用。您可以使用JavaScript单击它(或直接设置其checked
属性)。cmssoen23#
您必须在以下时间之前关闭Cookie弹出窗口: