Selenium Внедрение Try Кроме написания в JSON - PullRequest
0 голосов
/ 21 октября 2018

Я работаю над веб-шабером и пытаюсь создать некоторые исключения, поэтому, когда элемент не существует, он просто переходит к следующему элементу.

Я собираю более 10 элементов, а неЯ уверен, что лучший способ найти исключение и перейти к следующему элементу со всеми из них, я понимаю, что могу сделать оператор IF или Try / Except.

Я попытался реализовать концепцию Try / Except (как показано ниже), но я думаю, что я использовал это неправильно как 1. Мне не хватает некоторых результатов при печати (те, которые не являются исключением), 2. Это запись и печать неверных данных в JSON, где результат не 't существует - кажется, что используются данные из последней строки (я думаю).

Как сделать исключение, чтобы перейти к очистке следующего элемента, если данные не существуют, для всех элементовЯ очищаюсь?

Код, с которым я работаю, выглядит следующим образом (упрощенно):

# -*- coding: UTF-8 -*-
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time
import json
import csv

def writeToJSONFile(path, fileName, data):
    filePathNameWExt = './' + path + '/' + fileName + '.json'
    with open(filePathNameWExt, 'a') as fp:
        json.dump(data, fp, ensure_ascii=False)

urls = ['https://www.tripadvisor.co.uk/Restaurant_Review-g186338-d8122594-Reviews-Humble_Grape_Battersea-London_England.html','https://www.tripadvisor.co.uk/Restaurant_Review-g186338-d5561842-Reviews-Gastronhome-London_England.html']


browser = webdriver.Firefox(executable_path="/Users/path/Downloads/geckodriver")

data = []
for url in urls:

    browser.get(url)
    page = browser.find_element_by_class_name('non_hotels_like')
    title = page.find_element_by_class_name('heading_title').text
    street_address = page.find_element_by_class_name('street-address').text

    try:
        day1 = page.find_element_by_xpath("//DIV[@class='hours content']//SPAN[@class='day'][text()='Monday']").text
    except NoSuchElementException:
        pass
    #day1_hours = page.find_element_by_xpath("//div[@class='hours content']//div[2]//span[2]//div[1]").text

        print(title)
        print(street_address)
        print(day1)
        #print(day1_hours)

    data.append({'title': title, 'street_address': street_address, 'day1': day1})

filename = 'properties'

writeToJSONFile('./', filename, data)

browser.quit()

ОБНОВЛЕНИЕ, как советовал Джон, я добавил ловушку - хотя теперь получаю неверную синтаксическую ошибку!:

try:
    day1 = page.find_element_by_xpath("//DIV[@class='hours content']//SPAN[@class='day'][text()='Monday']").text
except NoSuchElementException:
        catch NoSuchElementException:
        day1 = 'Element not found'

1 Ответ

0 голосов
/ 21 октября 2018

Из вашего макета кода кажется возможным найти элементы page, title и street_address, но не элемент day1.Если это произойдет, как вы хотите с этим справиться?

Если вы хотите полностью пропустить этот URL, переместите операторы print() и data.append(...) внутри блока try:.

Если вы хотите использовать какое-либо значение по умолчанию для day1, присвойте его в блоке catch:

catch NoSuchElementException:
    day1 = 'Element not found'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...