如何使用 python selenium 点击链接?

Posted

技术标签:

【中文标题】如何使用 python selenium 点击链接?【英文标题】:how to click on the link using python selenium? 【发布时间】:2016-09-26 12:14:09 【问题描述】:

我正在尝试使用 python selenium 登录到我的linkedin。我可以打开我的主页,但之后我想打开主页上的以下链接

<a href="/profile/edit?trk=nav_responsive_sub_nav_edit_profile">
Edit Profile
</a>

我使用以下代码打开我的主页-

import getpass
from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.support.ui import WebDriverWait
url = "https://www.linkedin.com/uas/login"
driver = webdriver.Firefox()
driver.get(url)
username = 'email-id'
password = 'password'
user = driver.find_element_by_name("session_key")
for j in username:
    user.send_keys(j)
pasw = driver.find_element_by_name("session_password")
for j in password:
    pasw.send_keys(j)
driver.find_element_by_css_selector("div.form-buttons>input").click()
driver.find_element_by_link_text("Edit Profile").click()

但我收到以下错误消息-

selenium.common.exceptions.NoSuchElementException:消息:无法 定位元素:"method":"link text","selector":"Edit Profile"

【问题讨论】:

您可以在这里使用Xpath查找链接并单击..因为可能是链接文本有多余的空格或\t,\n...链接文本找不到... driver.find_element_by_xpath("html/body/div[2]/div[2]/div/div[1]/ul/li[2]/ul/li[1]/a" ).click() 这是使用 Xpath 查找链接并单击它的正确格式吗? 【参考方案1】:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import urllib, os, urllib.request
import time

driver = webdriver.Safari()

usrName = 'your_email'
pssWrd = "your_password"

driver.maximize_window()
driver.get("https://www.linkedin.com/uas/login?")

driver.find_element_by_name('session_key').send_keys(usrName)
driver.find_element_by_class_name('password').send_keys(pssWrd)
driver.find_element_by_name('signin').click()

【讨论】:

这不能回答问题 我错过了什么? 我认为 OP 的关键在于进入“编辑个人资料”页面。 明白了。 Web 元素现在完全不同了。我现在应该通过重定向到编辑页面来更新吗?【参考方案2】:

您的问题似乎可以通过明确等待页面上出现的元素来解决。请参阅以下文档的 5.1 显式等待部分

http://selenium-python.readthedocs.io/waits.html

类似这样的:

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, 'someid')))

注意:输入用户名、密码并点击提交后,应使用显式等待

【讨论】:

【参考方案3】:

似乎“编辑个人资料”只是“个人资料”下拉菜单的一个选项,因此最初不可见。您应该首先单击“配置文件”以打开下拉菜单。试试:

driver.find_element_by_link_text("Profile").click()
driver.find_element_by_link_text("Edit Profile").click()

更新

使用XPath

driver.find_element_by_xpath('//a[@class="nav-link"][contains(text(),"Profile")]').click()
driver.find_element_by_xpath('//a[@href="/profile/edit?trk=nav_responsive_sub_nav_edit_profile"]').click()

【讨论】:

我尝试了您的建议,但收到以下错误:selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: "method":"link text","selector":"Profile" 您确定您已通过授权并且可以访问个人资料编辑选项吗? 是的,我可以使用上面提到的代码通过主页成功登录,它甚至在我的 Firefox 中打开,显示了整个自动登录过程,但之后就不行了任何东西。 感谢您的更新。我尝试了 Xpath 方法仍然无法单击该链接-selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: "method":"xpath","selector":"//a[@class=\"导航链接\"][包含(text(),\"个人资料\")]" 不要使用 .sleep()。改用 WebDriverWait 并等待元素可单击...然后单击它。 .sleep() 不够动态......有时可能不够长,有时可能太长。一旦元素可用,将立即执行适当的等待,但如果等待时间过长,则会超时。

以上是关于如何使用 python selenium 点击链接?的主要内容,如果未能解决你的问题,请参考以下文章

python selenium百度搜索,怎么写才能点击该链接查看?

自动点击下载链接后,使用 Selenium、Firefox、Python 将下载的 EPS 文件保存到磁盘

如何使用 Selenium/Python 获取由 JavaScript 编写的 html 内容 [重复]

Python+Selenium+Unittest编写超链接点击测试用例

点击 Selenium + Python 无法滚动到视图中的链接的方式是啥?

如何使用 selenium-java 点击 href 链接