Как вызвать метод внутри функции селена - PullRequest
1 голос
/ 11 апреля 2020

За последние пару дней я создал очень простой c python веб-браузер, использующий селен, который очищает определенный веб-сайт с перечнем автомобилей и собирает данные о конкретном c марке и модели автомобиля. Однако у меня возникла проблема со ссылкой на метод внутри метода селен.

class crawler:
    def __init__(self, make, model):
        self.car_make = make
        self.car_model = model
        self.driver = webdriver.Chrome('C:/Users/ecc/Downloads/chromedriver/chromedriver.exe')
        self.driver.get("car-listing-website")
        sleep(2)
        self.driver.find_element_by_xpath("//select[@id='carPickerUsed_makerSelect']").click()
        sleep(1)
        self.driver.find_element_by_xpath("//option[contains(text(), {self.car_make}]").click()
        self.driver.find_element_by_xpath("//select[@id='carPickerUsed_modelSelect']").click()
        sleep(1)
        self.driver.find_element_by_xpath("//option[contains(text(), {self.car_model})]").click()

У меня проблема со ссылками на значения self.car_make и self.car_model в последних нескольких строках кода:

        self.driver.find_element_by_xpath("//option[contains(text(), {self.car_make}]").click()
        self.driver.find_element_by_xpath("//select[@id='carPickerUsed_modelSelect']").click()
        sleep(1)
        self.driver.find_element_by_xpath("//option[contains(text(), {self.car_model})]").click()

После этого запуска говорится, что это недопустимые выражения Xpath. Я предполагаю, что мой вопрос, это может быть даже достигнуто в течение селена? Если да, то это просто ошибка синтаксиса?

Для контекста, цель состоит в том, чтобы иметь возможность использовать экземпляры crawler (), чтобы иметь возможность просматривать любой тип марки и модели на веб-сайте без необходимости вручную обновить код для поиска этих разных марок и моделей. Например, в идеале вы могли бы использовать следующий код для получения данных листинга для Ford Mustangs:

crawler('Ford','Mustang')

1 Ответ

0 голосов
/ 11 апреля 2020

Ну, я не очень опытен с селеном, но, возможно, попробуйте это:

self.driver.find_element_by_xpath(f"//option[contains(text(), '{self.car_make}')]").click()  

Или это:

self.driver.find_element_by_xpath(f"//option[text()='{self.car_make}')]").click() 

Если нет, попробуйте поделиться частью Html у вас проблемы с.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...