pythonselenium搜索查询提供了多个结果。如何选择哪个是我的搜索查询?

2024-03-28 12:52:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我用selenium进行了搜索查询。之后我得到了多个结果。现在的问题是,只有一个环节对,怎么了我可以从多个结果中选择链接吗?并从结果中分析数据。 我有一个列表,每次进行搜索查询,结果有时可能会改变10或15。在

以下代码将始终选择第一个结果,但在本例中,我正在寻找4个链接:

代码:

from selenium import webdriver
from bs4 import BeautifulSoup
import time

driver = webdriver.Chrome()
driver.get("url")
#time.sleep(5)

username = driver.find_element_by_name("p_name")
#time.sleep(1)
username.send_keys("xxxxx)
#username.clear()
driver.find_element_by_xpath("html/body/form/table[6]/tbody/tr/td[2]/input").click()
driver.find_element_by_xpath("html/body/form/table[3]/tbody/tr[2]/td[4]/a").click()

html = driver.page_source

soup =BeautifulSoup(html)

for tag in soup.find_all('table'):
    print tag.text

Tags: 代码fromimportbytime链接htmldriver
3条回答

我想你可以用

driver.find_element_by_partial_link_text("OREGON BUD COMPANY LLC")

而不是

^{pr2}$

这将遵循完全匹配,并将带你到下一页。在

你知道搜索结果页面中条目的一般形式,也就是说,它们大写,没有特殊字符。假设您有这样一个搜索页面,您可以使用这些知识和selenium来搜索包含所需内容的文本,使用xpath表达式。在

>>> from selenium import webdriver
>>> driver = webdriver.Chrome()
>>> driver.get('http://egov.sos.state.or.us/br/pkg_web_name_srch_inq.do_name_srch?p_name=OREGON%20BUD%20COMPANY%2C%20LLC&p_regist_nbr=&p_srch=PHASE1&p_print=FALSE&p_entity_status=ACTINA')
>>> driver.find_element_by_xpath('.//*[contains(text(),"OREGON BUD COMPANY LLC")]/../..').text
'   4 DLLC ACT 1097010-94   CUR   OREGON BUD COMPANY LLC Search'

我只是简单地把整行的文本都删除了。您需要从父元素tr中提取实际需要的文本项。在

PS:在https://gist.github.com/LeCoupa/8c305ec8c713aad07b14有一个很好的xpath表达式页面。在

答案是使用只返回一个结果的更好的选择器。我更喜欢CSS选择器,但是如果您愿意的话,XPath的过程基本上是相同的。在

要在Chrome中获取CSS选择器:

  1. 右键单击元素并选择“检查”
  2. 右键单击DevTools的domsexplorer中的元素
  3. 选择“Copy”>;“Copy selector”(或者您也可以在这里获得XPath)

    在driver.find_element_css_选择器(“body>;form>;表:第n个孩子(4) >;tbody>;tr:nth child(2)>;td:nth child(2)>;input[type='text']')。sendKeys(“Timothy”)

    在driver.find_element_css_选择器(“body>;form>;表:第n个孩子(5) >;tbody>;tr>;td:nth child(2)>;input[type='text']')。sendKeys(“Cope”)

相关问题 更多 >