Как щелкнуть по первому результату поиска Yahoo с помощью Python Selenium

#python #selenium #search #yahoo

#python #селен #Поиск #yahoo

Вопрос:

Как я могу щелкнуть по первому результату поиска в Yahoo? Я перепробовал все возможные XPATH, а также как метод ожидания веб-драйвера, так и стандартный метод. но ни один из них не сработал. Я использую Python Selenium.

Мой код:

     import sys
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

    def element(driver, by_x, html_element):
        try:
            element = WebDriverWait(driver, 5).until(
                EC.presence_of_element_located((by_x, html_element))
            )
            return element
        except:
            print("Element not found")

    def get_numbers(string):
        numbers_list = [string[i] for i in range(len(string)) if string[i].isnumeric()]
        number = "".join(numbers_list)
        return number

    class movieRatingScraper: 
        def __init__(self, film):
            options = webdriver.ChromeOptions()
            options.add_experimental_option("excludeSwitches", ["enable-logging"])
            self.driver = webdriver.Chrome(executable_path="./drivers/chromedriver", options=options)
            self.film = film
            self.driver.get(f"https://search.yahoo.com/search?p={self.film}")

        def info(self):
            # THE PROBLEM
            element(self.driver, By.XPATH, "//*[@id='yui_3_10_0_1_1609677350466_629']").click()

        def rt_rating(self):
            WebDriverWait(self.driver,     10).until(EC.element_to_be_clickable((By.NAME,"agree"))).click()
            rt_string = element(self.driver, By.CLASS_NAME, "rottenTomatoes")
            rt_rating = get_numbers(rt_string.text)
            print(rt_rating)
            return rt_rating

        def get_current_url(self):
            return self.driver.current_url

        def quit(self):
            self.driver.quit()

    movie = movieRatingScraper("tenet")
    ratings = movie.rt_rating()
    movie.info()
    movie.get_current_url()
 

Ответ №1:

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

 (//div[@id='web']/descendant::li[@class='first'])[1]/descendant::a[1]
 

Еще одна вещь, я считаю, что вам нужно вызвать приведенный ниже метод перед выполнением rt_rating(). Пожалуйста, проверьте то же самое.

 movie.info()