如何使用Selenium的“ find_elements_by_xpath”获得要打印的标题

时间:2019-06-26 17:17:00

标签: python selenium google-chrome web-scraping

我正在编写一个自动化代码,以从网站上刮取独立的保险代理人的姓名,地址和邮政编码。我似乎无法识别正确的xpath或编写正确的代码集来获取要打印的元素。我正处在流程的开始阶段,现在我正要打印出代理商名称,然后再转到代理商的地址和邮政编码。

我尝试使用css选择器和xpath来识别和打印数据。该网站使用Javascript运行,因此当我尝试在Anaconda上进行编码并使用Scrapy时,蜘蛛只会抓取加载页面的html,而不会抓取随后出现的代理列表,因此我着手将Selenium与PyCharm结合使用。我已经尝试了很多不同的方式输入xpath,但是我得到的结果大致相同或错误消息也很多。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.common.exceptions import NoSuchAttributeException
from selenium.webdriver.remote.webelement import WebElement

# My Chrome webdriver
driver = webdriver.Chrome(executable_path="C:/Users/Owner/Desktop/chromedriver.exe")

# The website I'm scraping is here 
url = "https://insurance-agent.safeco.com/find-an-insurance- 
agency/app/search-results-locationSearch=Chicago,%2520IL"
driver.get(url)

# The wait so the results page gets scraped and not the loading page
driver.implicitly_wait(30)

# Identifying the xpath of the agent name
Agency_Name = driver.find_elements_by_xpath('//[@id="srpgLftAgencyName"]')
print(Agency_Name)

我得到的输出中有很多:

[<selenium.webdriver.remote.webelement.WebElement (session="38691bf8d9c3c1c0ec8d3455899cb06f", element="0.2587047071773503-1")>, <selenium.webdriver.remote.webelement.WebElement (session="38691bf8d9c3c1c0ec8d3455899cb06f", element="0.2587047071773503-2")>, <selenium.webdriver.remote.webelement.WebElement (session="38691bf8d9c3c1c0ec8d3455899cb06f", element="0.2587047071773503-3")>, <selenium.webdriver.remote.webelement.WebElement (session="38691bf8d9c3c1c0ec8d3455899cb06f", element="0.2587047071773503-4")>, <selenium.webdriver.remote.webelement.WebElement (session="38691bf8d9c3c1c0ec8d3455899cb06f", element="0.2587047071773503-5")>, <selenium.webdriver.remote.webelement.WebElement (session="38691bf8d9c3c1c0ec8d3455899cb06f", element="0.2587047071773503-6")>, <selenium.webdriver.remote.webelement.WebElement (session="38691bf8d9c3c1c0ec8d3455899cb06f", element="0.2587047071773503-7")>, <selenium.webdriver.remote.webelement.WebElement (session="38691bf8d9c3c1c0ec8d3455899cb06f", element="0.2587047071773503-8")>, <selenium.webdriver.remote.webelement.WebElement (session="38691bf8d9c3c1c0ec8d3455899cb06f", element="0.2587047071773503-9")>, <selenium.webdriver.remote.webelement.WebElement (session="38691bf8d9c3c1c0ec8d3455899cb06f", element="0.2587047071773503-10")>]

我要获取的只是代理商名称的纯文本,以便将其导出到Excel文档中。

(以下是我要查找的html中的确切元素:

<a id="srpgLftAgencyName" class="agencyTitle ng-binding" ng- 
show="x.agencyPrimaryName != ' '" ng-href="/find-an-insurance- 
agency/app/agency/2428293524282935" href="/find-an-insurance- 
agency/app/agency/2428293524282935">
                    PJ NUNZIO AND ASSOCIATES, INC.
                </a>

谢谢!)

2 个答案:

答案 0 :(得分:0)

使用get_attribute or text方法:

[agency.text for agency in Agency_Name]

答案 1 :(得分:0)

find_elements_by_xpath()将返回列表,而不是WebElement,因此,如果要获取元素文本,可以使用以下选项。

选项1:

#use index this will returns first match
Agency_Name = driver.find_elements_by_xpath('//[@id="srpgLftAgencyName"]')[0]
print(Agency_Name.text)

选项2:

#Use find_element this will return element 

Agency_Name = driver.find_element_by_xpath('//[@id="srpgLftAgencyName"]')
print(Agency_Name.text)