如何在搜索时单击向我们建议的第一个元素
Posted
技术标签:
【中文标题】如何在搜索时单击向我们建议的第一个元素【英文标题】:How to click on the first element which is suggested to us while searching 【发布时间】:2022-01-19 13:56:37 【问题描述】:我需要你的帮助。
如下图所示,您将在图中看到公司搜索框(例如:埃森哲)。我们通过 selenium 发送公司名称。该名称正在发送,但是当我们点击第一个建议的名称时,它没有被点击。
我正在研究linkedin上的belw URL:https://www.linkedin.com/jobs/search/?geoId=101165590&keywords=Machine%20learning&location=United%20Kingdom
我想通过应用过滤器发送公司名称。
我试过下面的想法。
company_button = WebDriverWait(driver,delay).until(EC.presence_of_element_located((By.XPATH,'//button[@aria-label="Company filter. Clicking this button displays all Company filter options."]')))
company_button.click()
time.sleep(2)
company_send = driver.find_element_by_xpath('//div[@class="search-basic-typeahead search-vertical-typeahead"]//input')
company_send.send_keys("Office Depot")
auto_complete = driver.find_elements_by_xpath(
"//li[@class='search-reusables__collection-values-item']")
auto_complete[0].click()
我需要你的帮助。提前感谢您的建议。
【问题讨论】:
请阅读为什么是screenshot of html or code or error is a bad idea。考虑使用基于格式化文本的相关 HTML、代码试验和错误堆栈跟踪来更新问题。 【参考方案1】:这是上述问题的工作代码。我花了一段时间才找到下拉列表。因此,为了找到它,我最初在输入框中搜索关键字后在 IDE 中打印了所有 HTML,然后搜索选项关键字,例如“埃森哲”和“埃森哲印度”。通过这种方式,我找到了访问下拉项目所需的元素。
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.maximize_window()
action = ActionChains(driver)
wait = WebDriverWait(driver, 5)
# Opening page and logging in
driver.get('https://www.linkedin.com/login?fromSignIn=true&trk=guest_homepage-basic_nav-header-signin')
driver.find_element_by_id("username").send_keys('Your UserID')
driver.find_element_by_id("password").send_keys('Your Password')
driver.find_element_by_xpath('//button[text()="Sign in"]').click()
# Search and Enter
time.sleep(5)
SearchTextBox = wait.until(EC.visibility_of_element_located((By.XPATH, '//input[@placeholder="Search"]')))
action.move_to_element(SearchTextBox).click().send_keys('Machine Learning').perform()
SearchTextBox.send_keys(Keys.ENTER)
# Click on Jobs
wait.until(EC.element_to_be_clickable((By.XPATH, '//button[text()="Jobs"]'))).click()
# Clicking company filter
company_button = WebDriverWait(driver, 10).until(EC.presence_of_element_located(
(By.XPATH, '//button[@aria-label="Company filter. Clicking this button displays all Company filter options."]')))
company_button.click()
# Send Accenture keyword in the inputbox
# Please modify the xpath as per your understanding. Relative path
wait.until(EC.presence_of_element_located((By.XPATH, '//input[@placeholder="Add a company"]'))).send_keys('Accenture')
time.sleep(5)
# Collect all the options
All_selection = driver.find_elements_by_xpath(
"//span[contains(@class,'search-typeahead-v2__hit-text t-14 t-black')]")
# Printing all the options
for i in All_selection:
print(i.text)
# Click on the first Option.
All_selection[0].click()
如果您有任何疑问,请告诉我。谢谢。
【讨论】:
您好 Swaroop 感谢您的回复。当我们没有登录 Linkedin 时,您的代码正在运行,然后我请求您.. 请您在登录 Linkdin 后尝试一下。然后你注意到元素发生了一些变化。我再次请求你,请尝试在 Linkedin 中登录。 嗨@KunalJoshi,我已根据您的要求更新了我的代码。现在我可以在登录后选择公司名称。在运行此脚本之前,请在脚本中提供用户名和密码。请让我知道此脚本是否适合您。运行多次,看看结果。如果您有任何疑问,请告诉我。 嗨@Swaroop 它工作正常。非常感谢你的好意。只有最后一个问题你能告诉我们如何提取这个 xpath("//span[contains(@class,'search-typeahead-v2__hit-text t-14 t-black')]") 以供将来参考 1.我已经编写了代码,直到它在公司文本框中输入“埃森哲”,然后出现建议。 2. 之后我执行了driver.find_element_by_xpath('//body').get_attribute('innerHTML')
代码。这将打印正文内部的 html。在该内部 html 中,您可以找到 UI 上可见的选项。在找到那个元素之后,我相应地构建了我的 XPATH。我就是这样得到那个代码的。以上是关于如何在搜索时单击向我们建议的第一个元素的主要内容,如果未能解决你的问题,请参考以下文章