python - 进入人物搜索后,无法在 LinkedIn 中选择“所有过滤器” - 无论我尝试什么,Find_element 都不起作用
问题描述
编写了简单的python代码来执行以下操作:1.登录到linkedin 2.点击搜索,然后是人 3.点击“所有过滤器”进一步修改搜索
我卡在第 3 步,无法让驱动程序选择并单击“所有过滤器”
我试图通过 xpath 查找元素,但是它是动态的,并且我尝试通过文本“所有过滤器”查找元素并且仍然无法正常工作
出于某种原因,当我右键单击“所有过滤器”按钮并单击“检查”时,它首先将我带到而不是实际按钮;我必须右键单击 - 第二次检查才能到达;这让我觉得按钮是隐藏的,我不确定如何继续。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import pynput.mouse as ms
import pynput.keyboard as kb
import time
driver = webdriver.Chrome("C:/Users/akame/Documents/PythonFiles/chromedriver.exe")
act = ActionChains(driver)
driver.get ('https://www.linkedin.com/')
driver.maximize_window()
login_email = driver.find_element_by_id('login-email')
login_password = driver.find_element_by_id('login-password')
submit1 = driver.find_element_by_id('login-submit')
mouse = ms.Controller()
keyboard = kb.Controller()
login_email.send_keys(‘XXXXX’)
login_password.send_keys('XXXXXX')
submit1.send_keys(u'\ue007')
searchfield = driver.find_element_by_xpath('//*[@id="ember49"]/input')
act.click(searchfield).perform()
act.send_keys(Keys.ARROW_DOWN).perform()
act.send_keys(Keys.ENTER).perform()
time.sleep(5)
#this is where it does not work--->
button_af = driver.find_element_by_text('All Filters')
button_af.click()
解决方案
尝试下面的代码,或者只是替换button_af = driver.find_element_by_text('All Filters')
为button_af=find_element_by_xpath("//span[@class='artdeco-button__text' and text()='All Filters']")
,因为有时有换行符\r
或\n
元素文本,你应该总是尝试使用contains
而不是==
获取元素的文本:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time
email = "ur_email"
pwd = "ur_pwd"
driver = webdriver.Chrome()
act = ActionChains(driver)
driver.get ('https://www.linkedin.com/')
login_email = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "login-email"))
)
login_password = driver.find_element_by_id('login-password')
submit1 = driver.find_element_by_id('login-submit')
login_email.send_keys(email)
login_password.send_keys(pwd)
submit1.click()
searchfield = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//input[@role='combobox']")))
searchfield.click()
searchKeywordXpath = "//span[text()='People']"
searchKeyword = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, searchKeywordXpath)))
searchKeyword.click()
btnAllFilterXpath = "//span[@class='artdeco-button__text' and text()='All Filters']"
btnAllFilter = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, btnAllFilterXpath)))
btnAllFilter.click()
# just debug code: wait to see the right page appear or not
time.sleep(10)
推荐阅读
- javascript - jQuery选择字符串上的第二个元素
- python - 迭代地平均特定列表元素?
- python-3.x - 为什么这个函数被认为是队列的实现?
- javascript - 对 JavaScript 数组中的相同值进行分组
- axapta - Dynamics 365 FO 数据实体:临时表为空
- intel - 如何从 MPSS 4.4.1 修复 modprobe 错误
- reactjs - 懒惰渲染孩子
- batch-file - How to output multiple lines from a FINDSTR to a variable
- cordova - Fabric.js + IonicV3 - 'touch:gesture' 事件
- python - VSCode pipenv 运行 REPL 程序接收环境激活导致初始语法错误