使用Selenium提取自动完成搜索提供的数据

拉斐尔

我想提取网站搜索栏的自动完成功能提供的部分结果。我在提取结果时遇到了麻烦。我可以输入所需的查询,但是无法存储自动建议。似乎每当我单击下拉建议以“检查元素”以查找选择下拉菜单的内容时,该提示都消失了!

这是我正在使用的代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import os
from scrapy.selector import HtmlXPathSelector

#launch chromedirver
driver.get("http://www.marinetraffic.com/en/ais/index/ports/all")

searchBox = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located(
        (By.XPATH, '//input[@id= "portname"]')
    )
)
searchBox.click()
searchBox.clear()
a = searchBox.send_keys('Belawan') #so far so good

selen_html = driver.find_element_by_class_name('input-group').get_attribute('innerHTML')
hxs = HtmlXPathSelector(text=selen_html)
suggests =  hxs.select('//div[@class= "input-group"/Belawan/@title').extract
driver.close()

毫不奇怪,该错误是ValueError: XPath error: Invalid predicate in //div[@....[etc]如何找到要放入XPath的正确名称?

自动完成采用BELAWAN - Port [ID]最终目的是退出的形式ID

编辑:屏幕截图

索拉拜德

这应该工作。基本上,您会发现这些Web元素的xpath定位符

在你的情况下,就像

<ul class="ui-autocomplete ui-front ui-menu ui-widget ui-widget-content ui-corner-all" id="ui-id-3" tabindex="0" style="display: none; top: 375px; left: 63px; width: 306px;">
   <li class="ui-menu-item" role="presentation"><a id="ui-id-7" class="ui-corner-all" tabindex="-1"><b>BELA</b>WAN&nbsp;-&nbsp;Port [ID]</a></li>
   <li class="ui-menu-item" role="presentation"><a id="ui-id-8" class="ui-corner-all" tabindex="-1"><b>BELA</b>WAN ANCH&nbsp;-&nbsp;Ancorage [ID]</a></li>
</ul>

所以我用id来获取另一个ul,然后用它find_elements_by_xpath来获取与xpath匹配的childd的列表。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import os

#launch chromedirver
driver = webdriver.Chrome()
driver.get("http://www.marinetraffic.com/en/ais/index/ports/all")

searchBox = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located(
        (By.XPATH, '//input[@id= "portname"]')
    )
)
searchBox.click()
searchBox.clear()
a = searchBox.send_keys('Belawan') #so far so good

web_elem_list = driver.find_element_by_id("ui-id-3").find_elements_by_xpath("//li[@role='presentation']/a")
suggests = [web_elem.text for web_elem in web_elem_list]
driver.close()
print suggests


# Will Give o/p
[u'BELAWAN - Port [ID]', u'BELAWAN ANCH - Ancorage [ID]']

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python Selenium测试。如何从Google主页上的搜索框中提取自动建议?

SSH从何处提取自动完成功能?

如何使用Selenium Webdriver处理自动搜索完成

自动完成建议和使用json数据搜索

使用Ajax请求作为源数据的Jquery自动完成搜索

如何获取自动完成功能,不仅要搜索其开头,还要使用包含,例如包含“门”

从 Angular Form 获取自动完成表单数据

python selenium自动完成搜索问题

从自动完成搜索表单访问数据

QtQuick文本搜索使用Google自动完成自动完成

如何在activeadmin中获取自动完成/搜索字段作为输入

tkinter组合框中是否提供自动完成搜索功能?

使用JSON数据自动完成

使用C ++自动完成(Shell不提供)

jQuery自动完成使用使用Ajax REST从SharePoint列表中提取的数据

如何使用DuckDuckGo的搜索自动完成建议

使用流星自动完成包搜索(mizzao)

使用 Observables 进行角度自动完成搜索

使用自动完成搜索PHP的基于数据库列的记录过滤不起作用

使用Selenium Webdriver测试自动完成

使用 Python Selenium 无法自动完成输入

搜索自动完成android

使用Golang推送Firebase后,如何提取自动生成的唯一ID?

zsh 完成:使用 tar 提取存档时不提供目录

如何使用 Ajax 和 Laravel 将自动完成数据提取到他们受尊重的元素中?

如何添加自动完成功能以使用 angularjs 和远程数据库搜索输入文本?

如何通过javascript在chrome开发人员控制台中获取自动完成数据?

使用MongoDB搜索实现自动完成功能

使用二进制搜索进行简单的自动完成