【问题标题】:finding Search result Position using selenium and python使用 selenium 和 python 查找搜索结果位置
【发布时间】:2017-06-28 15:12:47
【问题描述】:

这是网页的链接。

https://shop.techdata.com/

当我运行以下代码时,它会成功执行


import pip


package_name = 'selenium'
pip.main(['install', package_name])

from selenium import webdriver

driver = webdriver.Chrome("C:\All\chromedriver_win32\chromedriver.exe")
#Chromedriver is needed on your machine  but sometimes webdriver.Chrome() works as well
driver.get('https://shop.techdata.com/')

driver.set_page_load_timeout(30)

driver.find_element_by_id("quickSearchBox").send_keys("printer")

driver.find_element_by_id("quickSearch").click()

结果我得到了以下网页,这是成功的:

https://shop.techdata.com/searchall?b=1&kw=printer


我的问题从这里开始 现在在出现的搜索结果中,我想得到名为 EPSON 的公司的所有打印机的位置(它出现在第 14 位,第 15 位和第 16 位)

所以我做了以下交集,但输出集为空。


search_elements = driver.find_elements_by_class_name('productContent')

EPSON_elements = driver.find_elements_by_partial_link_text('EPSON')


print('search_elements',search_elements)
print('EPSON_elements>',EPSON_elements)
elements = set(search_elements).intersection(set(EPSON_elements))
print('Common elements>', elements)

当我打印搜索元素和 epson 元素时,计数正确。它给出了 25 个搜索元素和 3 个 epson 元素,我手动检查了它们并且它是正确的,但现在它无法找到交集并且共同元素的输出设置为空。

所以我的问题是.. 我如何找到第 8、9 和第 10 的位置?

【问题讨论】:

    标签: python html selenium-webdriver


    【解决方案1】:

    所有打印机共有的一个元素是带有class productDetailsLink 的锚点。找到这些集合,然后查找包含“EPSON”作为text 的集合。

    >>> from selenium import webdriver
    >>> driver = webdriver.Chrome()
    >>> driver.get('https://shop.techdata.com/searchall?b=1&kw=printer')
    >>> items = driver.find_elements_by_class_name('productDetailsLink')
    >>> len(items)
    25
    >>> for i, item in enumerate(items):
    ...     if 'EPSON' in item.text:
    ...         i, item.text
    ... 
    (7, 'EPSON WORKFORCE PRO WF-4740 - MULTIFUNCTION PRINTER (COLOR)')
    (8, 'EPSON WORKFORCE PRO WF-4730 - MULTIFUNCTION PRINTER (COLOR)')
    (9, 'EPSON WORKFORCE PRO WF-3720 - MULTIFUNCTION PRINTER (COLOR)')
    

    编辑,响应 cmets:

    此代码包含之前的要求,即搜索打印机页面。它包括等待第一页完全加载所需的安排。

    >>> from selenium import webdriver
    >>> driver = webdriver.Chrome()
    >>> driver.get('https://shop.techdata.com/')
    >>> driver.find_element_by_id("quickSearchBox").send_keys("printer")
    >>> driver.find_element_by_id("quickSearch").click()
    >>> items = driver.find_elements_by_class_name('productDetailsLink')
    >>> len(items)
    25
    >>> for i, item in enumerate(items):
    ...     if 'EPSON' in item.text:
    ...         i, item.text
    ...         
    (7, 'EPSON WORKFORCE PRO WF-4740 - MULTIFUNCTION PRINTER (COLOR)')
    (8, 'EPSON WORKFORCE PRO WF-4730 - MULTIFUNCTION PRINTER (COLOR)')
    (9, 'EPSON WORKFORCE PRO WF-3720 - MULTIFUNCTION PRINTER (COLOR)')
    

    【讨论】:

    • 嗨,谢谢,但我之前尝试过这样做。它每次只返回一个输出......您使用的链接不同。它不搜索关键字/我是 python 新手,所以我很难理解>>>>>>(24, HP OFFICEJET PRO 8710 ALL-IN-ONE - MULTIFUNCTION PRINTER (COLOR))
    • 我怀疑你使用了find_element_by_class_name 而不是find_elements_by_class_name。这可能吗?
    • 我现在明白了。我把你搜索关键字的部分省略了,因为你已经知道该怎么做了。
    • quickSearchBox 必须变得可见,您才能将密钥发送给它。为此,您可以在selenium-python.readthedocs.io/waits.html 看到“预期条件”,然后点击标有“便利方法”的链接。我想你可以在那里使用一个。
    • 您好,先生,您能看看我正在处理的另一个问题吗? >>>>>>>>> 将 python 输出作为一个块/行附加到现有 Excel 文件中
    【解决方案2】:

    您可以将键“打印机”更改为“爱普生打印机”

    【讨论】:

    • 但这只会导致 EPSON 打印机......我想列出所有,然后找到我的产品所在的位置
    猜你喜欢
    • 2019-08-04
    • 2020-11-23
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多