我正在尝试将Selenium用于python,以单击github顶部的登录链接。我尝试使用find_element_by_link_text()
,但得到了NoSuchElementException。然后,我尝试使用find_element_by_xpath()
,并且得到了ElementNotinteractableException。这是第一个代码:
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://github.com')
signin = browser.find_element_by_link_text('Sign in')
signin.click()
这是第二个的代码。
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://github.com')
signin_link = browser.find_element_by_xpath('/html/body/div[1]/header/div/div[2]/div[2]/a[1]')
signin_link.click()
我什至尝试了find_element_by_css_selector()
,但也得到了ElementNotInteractableException。我不明白怎么了。我不想放入html,但是如果您转到github,它只是右上角的登录链接。
我认为您错过了通过chromedriver路径。试试这个:
browser = webdriver.Chrome(r"C:\Users\...\chromedriver.exe")
此外,如果您想进入登录页面,那么我建议避免长距离root。我的意思是,以下代码应直接将您带到登录页面:
browser.get('https://github.com/login')
但是,如果您必须知道,还可以如何单击该元素,请尝试遍历“ href”元素:
for el in browser.find_elements_by_tag_name("a"):
if "/login" in el.get_attribute('href'):
el.click()
要处理动态元素,请诱发WebDriverWait
()并等待element_to_be_clickable
()并使用以下定位符策略。
LINK_TEXT:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
browser = webdriver.Chrome()
browser.get('https://github.com')
signin =WebDriverWait(browser,10).until(expected_conditions.element_to_be_clickable((By.LINK_TEXT,"Sign in")))
signin.click()
XPATH:
browser = webdriver.Chrome()
browser.get('https://github.com')
signin =WebDriverWait(browser,10).until(expected_conditions.element_to_be_clickable((By.XPATH,"//a[@href='/login']")))
signin.click()
CSS选择器:
browser = webdriver.Chrome()
browser.get('https://github.com')
signin =WebDriverWait(browser,10).until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR,"a[href='/login']")))
signin.click()
click()
在GitHub页面https://github.com/右上角的[[Sign in元素上的[[To Selenium],您需要为WebDriverWait引入element_to_be_clickable()
,并且您可以使用跟随Locator Strategies:使用
PARTIAL_LINK_TEXT
:
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "Sign"))).click()
使用CSS_SELECTOR
:
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[href='/login']"))).click()
使用XPATH
:
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[starts-with(., 'Sign')]"))).click()
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC