from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.webelement import WebElement
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get('https://onecall.1100.com.au/au-b4-en/Account/Login')
wait = WebDriverWait(driver, 10)
# wait for the form to get visible
login_form = wait.until(EC.visibility_of_element_located((By.ID, 'loginForm')))
# accept terms
accept_terms = login_form.find_element_by_css_selector('label[for=acceptTermsAndConditions]')
ActionChains(driver).move_to_element_with_offset(accept_terms, 0, 0).click().perform()
# keep me logged in
login_form.find_element_by_css_selector('label[for=checkbox2]').click()
# take a screenshot to prove it is working
login_form.screenshot('form.png')
TL;请参阅下面带有澄清注释的代码
它对您不起作用的原因之一可能是您需要等待窗体呈现、可见和可交互。这可以用Explicit Wait来解决
我注意到的另一个问题是,通过
.click()
单击“Accept Terms”,因为单击发生在元素的中间,它会在一个单独的选项卡中打开使用条款,这是不需要的。您可以通过使用偏移量单击(0, 0)
和Action Chains来解决这个问题至于使用selenium定位器进入复选框,可以通过多种不同的方式来实现。在下面的代码中,我使用CSS选择器来检查
label
元素的for
属性的值工作代码:
这就是你将在
form.png
中看到的:相关问题 更多 >
编程相关推荐