首页 > 解决方案 > 进入人物搜索后,无法在 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()  

标签: pythonselenium

解决方案


尝试下面的代码,或者只是替换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)


推荐阅读