我用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
答案 0 :(得分:1)
您知道搜索结果页面中的条目的一般形式,即它们被大写并且被特殊字符剪掉。假设您有这样的搜索页面,您可以使用这些知识和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表达式页面。
答案 1 :(得分:0)
答案是使用只返回一个结果的更好的选择器。我更喜欢CSS选择器,但如果您愿意,XPath的过程基本相同。
在Chrome中获取CSS选择器:
选择"复制" > "复制选择器" (或者你也可以在这里获得XPath)
driver.find_element_by_css_selector((" body> form> table:nth-child(4)> tbody> tr:nth-child(2)> td:nth-child(2)> ;输入[type =' text']"))。sendKeys(" Timothy")
driver.find_element_by_css_selector((" body> form> table:nth-child(5)> tbody> tr> td:nth-child(2)> input [type =&# 39;文本']&#34))的SendKeys("柯普&#34)
答案 2 :(得分:0)
我认为你可以使用
driver.find_element_by_partial_link_text("OREGON BUD COMPANY LLC")
而不是
driver.find_element_by_xpath('.//*[contains(text(),"OREGON BUD COMPANY LLC")]/../..').text
这将遵循完全匹配,并将进入下一页。