如何使用python selenium单击链接?

2024-04-25 02:18:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用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: Message: Unable to locate element: {"method":"link text","selector":"Edit Profile"}


Tags: fromimportbydriverselenium主页passwordelement
3条回答
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()

似乎“编辑配置文件”只是“配置文件”下拉菜单的一个选项,所以它的缩写不可见。你应该先点击“个人资料”打开下拉菜单。尝试:

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()

听起来您的问题可能可以通过显式地等待页面上出现的元素来解决。参见以下文档的5.1节显式等待

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

像这样的:

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

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

相关问题 更多 >