python-3.x Selenium复选框单击

fivyi3re  于 2023-05-23  发布在  Python
关注(0)|答案(3)|浏览(149)

我正在练习使用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()

这两种方法似乎都不能标记复选框

axkjgtzd

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,因为当网站中的某些内容发生更改时,它们往往会中断。尽量坚持使用类名或元素内容。

4jb9z9bj

4jb9z9bj2#

条款和条件复选框被另一个元素阻止,因此调用click()不起作用。您可以使用JavaScript单击它(或直接设置其checked属性)。

driver.execute_script('arguments[0].click()', driver.find_element(By.ID, 'termsAndConditions'))
cmssoen2

cmssoen23#

您必须在以下时间之前关闭Cookie弹出窗口:

driver.get("https://www.starbucks.com/account/create")
driver.implicitly_wait(2)
time.sleep(3)
# Accept cookies
elem = driver.find_element(By.ID, "truste-consent-button").click()
time.sleep(1)
driver.find_element(By.XPATH, '//div[h2[contains(text(), "Terms of Use")]]//label[@class="option option--checkbox"]//span[@class="block option__labelMarker"]').click()
time.sleep(3000)

相关问题