使用CSS选择器从网页提取数据-Selenium Python

时间:2018-09-20 08:19:31

标签: python selenium selenium-chromedriver

我想从我的设备中提取一些戴尔网站上的日期。 我尝试使用urllib下载网页,但是该网页受​​验证码保护,因此暂时无法绕开。 现在,我正在使用Selenium打开浏览器,手动解决capthca,然后自动打开页面并提取日期。 问题是css选择器返回了一些奇怪的元素,而不是所需的输出

我的代码:

from selenium import webdriver
import time
driver = webdriver.Chrome()


def scrape(codes):
    dates = []
    for i in range(len(codes)):
        driver.get("https://www.dell.com/support/home/us/en/19/product-support/"
                   "servicetag/%s/warranty?ref=captchasuccess" % codes[i])

    # Solve captcha manually
        if i == 0:
            print("You now have 120\" seconds to solve the captcha")
            time.sleep(120)
            print("120\" Passed")
    # Extract data
        expdate = driver.find_element_by_css_selector("#printdivid > div > div.not-annotated.hover > table:nth-child(3) > tbody > tr > td:nth-child(3)")
        print(expdate)
    driver.close()

codes = ['1FMR762', '15FDBG2', '10V8YZ1']
scrape(codes)

预期输出:

June 22, 2018
October 15, 2017
April 19, 2017

给出输出:

<selenium.webdriver.remote.webelement.WebElement (session="d83af0f7a3a9c79307d2058f863a7ecb", element="0.21873872382745052-1")>
<selenium.webdriver.remote.webelement.WebElement (session="d83af0f7a3a9c79307d2058f863a7ecb", element="0.06836824093097027-1")>
<selenium.webdriver.remote.webelement.WebElement (session="d83af0f7a3a9c79307d2058f863a7ecb", element="0.6642161898702734-1")>

1 个答案:

答案 0 :(得分:1)

看看API文档,find_element_by_css_selector函数返回一个WebElement对象。参见https://selenium-python.readthedocs.io/api.html

Python and how to get text from Selenium element WebElement object?中所述,在打印之前需要将Web元素内容转换为字符串。

因此将您的行print (expdate)更改为print (expdate.text)应该会有所帮助。