首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Selenium和Python单击href链接

如何使用Selenium和Python单击href链接
EN

Stack Overflow用户
提问于 2022-08-10 16:41:03
回答 2查看 601关注 0票数 0

我正在开发一个程序,可以自动登录到某个网页,并单击某些按钮和链接,以到达最终目的地,输入某些值并提交它们。我已经设法浏览了网页,但其中一个网页有一个超链接按钮,我需要Selenium来单击,然而,在尝试了多种不同的方法之后,我无法让它工作。

我尝试过用By.XPATHBy.LINK_TEXTBy.PARTIAL_LINK_TEXT找到元素,但这些都没有用。我想我的问题可能是因为它是点击一个全新的URL,所以我将新的URL加载到代码的底部,然后继续我的程序。

超链接按钮:按钮

我试图单击的超链接按钮的代码块:

XPath本身是:/html/body/div[2]/table/tbody/tr/td[2]/p/span/a[2]

代码语言:javascript
运行
复制
driver = webdriver.Chrome(executable_path='C:\chromedriver.exe')
driver.get('')

'''
username_input = '//*[@id="userNameInput"]'
password_input = '//*[@id="passwordInput"]'
submit_button = '//*[@id="submitButton"]'
send_push = '//*[@id="auth_methods"]/fieldset/div[1]/button'
'''

# enters username and password into fields
driver.find_element("xpath", '//*[@id="userNameInput"]').click()
driver.find_element("xpath", '//*[@id="userNameInput"]').send_keys(username)
driver.find_element("xpath", '//*[@id="passwordInput"]').click()
driver.find_element("xpath", '//*[@id="passwordInput"]').send_keys(password)


driver.find_element("xpath", '//*[@id="submitButton"]').click()

# clicks 'send me a push' button on duo mobile screen
WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='duo_iframe']")))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable(("xpath", "//button[normalize-space()='Send Me a Push']"))).click()

WebDriverWait(driver, 20).until(EC.element_to_be_clickable(("xpath", '//*[@id="p_p_id_56_INSTANCE_xWhKj4tIFYvm_"]/div/div/div[1]/a[5]'))).click()

# loads next url which has the link on its webpage that needs to be clicked
driver.get('')

# attempts to click on link
driver.find_element("xpath", '/html/body/div[2]/table/tbody/tr/td[2]/p/span/a[2]').click()

我已经删除了driver.get('')中的URL,因为它们包含敏感URL。

最后一行代码是尝试使用XPath单击超链接。

任何帮助都是非常感谢的!

编辑:

经过进一步研究,我现在看到两个按钮的元素中都有相同的类名:

站点地图按钮:站点地图

学生按钮:学生

EN

回答 2

Stack Overflow用户

发布于 2022-08-10 16:59:30

我假设find_element没有返回正确的元素,因此不能单击。或者您可以通过将.click()更改为.text来验证它。如果它返回SITE MAP,那么它返回一个正确的元素。

如果你能尝试的话,我有另一个解决办法。它使用xpath,并假定class='pageheaderlink'是HTML中的单个元素。

代码语言:javascript
运行
复制
list_subcontent = driver.find_elements_by_xpath(".//span[@class='pageheaderlink']")

for item in list_subcontent:
    if item.text == 'SITE MAP':
        item.click()
票数 0
EN

Stack Overflow用户

发布于 2022-08-10 19:45:30

考虑到HTML:

文本为站点映射的元素是<a>标记和动态元素。要单击可单击的元素,需要为https://stackoverflow.com/a/54194511/7429447诱导WebDriverWait,可以使用以下任何一个https://stackoverflow.com/a/48056120/7429447

  • 使用PARTIAL_LINK_TEXT: (驱动程序,20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT,“站点地图”).click()
  • 使用CSS_SELECTOR: ( 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,“a.submenulinktext2”))(.click()
  • 使用XPATH: (驱动程序,20).until(EC.element_to_be_clickable((By.XPATH,“//a@class=‘submenulinktext2 2’并包含(.,'SITE MAP‘)”)).click()
  • 注意事项:您必须添加以下导入: 从selenium.webdriver.support.ui导入WebDriverWait从selenium.webdriver.common.by导入从selenium.webdriver.support导入expected_conditions作为EC
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73309906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档