【问题标题】:How do I get the titles to print using Selenium's "find_elements_by_xpath"如何使用 Selenium 的“find_elements_by_xpath”打印标题
【发布时间】:2019-11-08 17:01:03
【问题描述】:

我正在编写一个自动化代码来从网站上抓取独立的保险代理人姓名、地址和邮政编码。我似乎无法识别正确的 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>

谢谢!)

【问题讨论】:

    标签: python selenium google-chrome web-scraping


    【解决方案1】:

    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)
    

    【讨论】:

      【解决方案2】:

      使用get_attribute or text方法:

      [agency.text for agency in Agency_Name]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-07-08
        • 2022-01-27
        • 2021-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多