Определить строку таблицы и данные таблицы - CSS Selector Python - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть несколько случаев строк таблицы, из которых я хочу извлечь данные:

Дело 1

 Onsite Service After Remote Diagnosis  April 19, 2014  April 19, 2017

Дело 2

CAR                                     October 15, 2016    October 15, 2017    
Onsite Service After Remote Diagnosis   October 15, 2016    October 15, 2019

Дело 3

NBD ProSupport                          July 16, 2008   July 15, 2011   
Onsite Service After Remote Diagnosis   July 16, 2008   July 15, 2011

Информация, которую мне нужно извлечь, находится в строках, которые содержат «Обслуживание на месте после удаленной диагностики» во втором тд, который будет для каждого случая датой справа от строки

Ожидаемый вывод:

                      April 19, 2017
                    October 15, 2017
                       July 15, 2011

Мой код:

from selenium import webdriver
import time
from openpyxl import load_workbook

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.get_attribute('innerText'))
    driver.close()

codes = ['159DT3J', '15FDBG2', '10V8YZ1']
scrape(codes)

Мой вывод:

April 19, 2014
October 15, 2016
July 16, 2008

Взято из первого появившегося ряда и первого td Я пытался изменить tbody > tr > td:nth-child(3), но идентификация по тексту была бы лучше и избежать ошибок.

1 Ответ

0 голосов
/ 20 сентября 2018

Поскольку вам нужно извлечь текст для «Обслуживание на месте после удаленной диагностики», я бы посоветовал вам обновить строку, которую вы используете для поиска элемента, следующим образом:

expdate = driver.find_element_by_xpath("//td[text()='Onsite Service After Remote Diagnosis']/following-sibling::td")

Здесь мы используемxpath locator и ищет td рядом с текстом ' Обслуживание на месте после удаленной диагностики '

...