如何使用Selenium和Python单击GitHub页面上的Sign in元素https://github.com/

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

我正在尝试将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,它只是右上角的登录链接。

python selenium xpath css-selectors webdriverwait
3个回答
0
投票

我认为您错过了通过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()

0
投票

要处理动态元素,请诱发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()

0
投票
使用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

  • © www.soinside.com 2019 - 2024. All rights reserved.