如何在搜索时单击向我们建议的第一个元素

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。我就是这样得到那个代码的。

以上是关于如何在搜索时单击向我们建议的第一个元素的主要内容,如果未能解决你的问题,请参考以下文章

禁用右键单击时如何检查chrome中的元素?

如何向数组里添加元素

如何使用 Angular 2/4 开发搜索建议文本框

当我单击列表视图项目时,如何进入其他活动?

如何向当前元素的相对位置的元素发送事件

我们如何在 Swift 中单击第一个 VC 时打开标签栏