Mer*_*oug 5 selenium python-3.x selenium-chromedriver selenium-webdriver
目标:使用 Selenium 和 Python 在 LinkedIn 的搜索栏上搜索公司名称,然后单击导航中的“公司”按钮以获取有关与关键字相似的公司(而不是该公司的个人)的信息。请参阅下面的示例。“CalSTRS”是我在搜索栏中搜索的公司。然后我想点击“公司”导航按钮。
我的辅助函数:我定义了以下辅助函数(包括此处的可重复性)。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from random import randint
from selenium.webdriver.common.action_chains import ActionChains
browser = webdriver.Chrome()
def li_bot_login(usrnm, pwrd):
##-----Log into linkedin and get to your feed-----
browser.get('https://www.linkedin.com')
##-----Find the Search Bar-----
u = browser.find_element_by_name('session_key')
##-----Enter Username and Password, Enter-----
u.send_keys(usrnm)
p = browser.find_element_by_name('session_password')
p.send_keys(pwrd + Keys.ENTER)
def li_bot_search(search_term):
#------Search for term in linkedin search box and land you at the search results page------
search_box = browser.find_element_by_css_selector('artdeco-typeahead-input.ember-view > input')
search_box.send_keys(str(search_term) + Keys.ENTER)
def li_bot_close():
##-----Close the Webdriver-----
browser.close()
li_bot_login()
li_bot_search('calstrs')
time.sleep(5)
li_bot_close()
Run Code Online (Sandbox Code Playgroud)
这是“公司”按钮元素的 HTML:
<button data-vertical="COMPANIES" data-ember-action="" data-ember-action-7255="7255">
Companies
</button>
Run Code Online (Sandbox Code Playgroud)
和 XPath:
//*[@id="ember1202"]/div[5]/div[3]/div[1]/ul/li[5]/button
Run Code Online (Sandbox Code Playgroud)
我的尝试: 诚然,我对 HTML 和 CSS 的经验不是很丰富,所以我可能遗漏了一些明显的东西。显然,我没有选择/与正确的元素交互。到目前为止,我已经尝试...
companies_btn = browser.find_element_by_link_text('Companies')
companies_btn.click()
Run Code Online (Sandbox Code Playgroud)
返回此回溯:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"link text","selector":"Companies"}
(Session info: chrome=63.0.3239.132)
(Driver info: chromedriver=2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73),platform=Windows NT 10.0.16299 x86_64)
Run Code Online (Sandbox Code Playgroud)
和
companies_btn_xpath = '//*[@id="ember1202"]/div[5]/div[3]/div[1]/ul/li[5]/button'
browser.find_element_by_xpath(companies_btn_xpath).click()
Run Code Online (Sandbox Code Playgroud)
有了这个回溯......
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="ember1202"]/div[5]/div[3]/div[1]/ul/li[5]/button"}
(Session info: chrome=63.0.3239.132)
(Driver info: chromedriver=2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73),platform=Windows NT 10.0.16299 x86_64)
Run Code Online (Sandbox Code Playgroud)
和
browser.find_element_by_css_selector('#ember1202 > div.application-outlet > div.authentication-outlet > div.neptune-grid.two-column > ul > li:nth-child(5) > button').click()
Run Code Online (Sandbox Code Playgroud)
返回此回溯...
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"#ember1202 > div.application-outlet > div.authentication-outlet > div.neptune-grid.two-column > ul > li:nth-child(5) > button"}
(Session info: chrome=63.0.3239.132)
(Driver info: chromedriver=2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73),platform=Windows NT 10.0.16299 x86_64)
Run Code Online (Sandbox Code Playgroud)
看来您只是使用了不正确的选择器。
注意
@id的div象"ember1002"是动态值,所以每次访问页面时会有所不同:"ember1920","ember1202",等...
find_element_by_link_text()只能应用于链接,例如<a>Companies</a>,但不能应用于按钮
尝试通过其文本内容查找按钮:
browser.find_element_by_xpath('//button[normalize-space()="Companies"]').click()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14249 次 |
| 最近记录: |