Python Selenium не может нажать кнопку () - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь автоматизировать очистку ссылок отсюда:

https://thegoodpubguide.co.uk/pubs/?paged=1&order_by=category&search=pubs&pub_name=&postal_code=&region=london

Как только у меня появится первая страница, я хочу нажать на правый шеврон внизу, вчтобы перейти ко второму, третьему и так далее.Очистка ссылок между ними.

К сожалению, все, что я пытаюсь сделать, не позволяет отправить Chrome на следующую страницу.

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import time
    from datetime import datetime
    import csv
    from selenium.webdriver.common.action_chains import ActionChains

    #User login info
    pagenum = 1

    #Creates link to Chrome Driver and shortens this to 'browser'
    path_to_chromedriver = '/Users/abc/Downloads/chromedriver 2' # change path as needed
    driver = webdriver.Chrome(executable_path = path_to_chromedriver)

    #Navigates Chrome to the specified page
    url = 'https://thegoodpubguide.co.uk/pubs/?paged=1&order_by=category&search=pubs&pub_name=&postal_code=&region=london'


    #Clicks Login
    def findlinks(address):

        global pagenum

        list = []

        driver.get(address)
        #wait
        while pagenum <= 2:

            for i in range(20): # Scrapes available links
                xref = '//*[@id="search-results"]/div[1]/div[' + str(i+1) + ']/div/div/div[2]/div[1]/p/a'
                link = driver.find_element_by_xpath(xref).get_attribute('href')
                print(link)
                list.append(link)

            with open("links.csv", "a") as fp: # Saves list to file 
                wr = csv.writer(fp, dialect='excel')
                wr.writerow(list)

            print(pagenum)

            pagenum = pagenum + 1

            element = driver.find_element_by_xpath('//*[@id="search-results"]/div[2]/div/div/ul/li[8]/a')
            element.click()


    findlinks(url)

Что-то блокирует кнопку, которую я не вижу?

Ошибка, напечатанная на моем терминале:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="search-results"]/div[2]/div/div/ul/li[8]/a"}

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

попробуйте это:

element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[class='next-page btn']"))  
element.click()
0 голосов
/ 15 мая 2018

РЕДАКТИРОВАТЬ:

Xpath, который вы указываете для шеврона, является переменным между страницами и не совсем правильно.Обратите внимание на li[6] и li[8] и li[9].

На странице 1: xpath равен //*[@id="search-results"]/div[2]/div/div/ul/li[6]/a/i

На странице 2: xpath равен //*[@id="search-results"]/div[2]/div/div/ul/li[8]/a/i

На странице 3: xpath - это //*[@id="search-results"]/div[2]/div/div/ul/li[9]/a/i

Вам нужно будет найти способ определить, какой xpath использовать.Вот подсказка: кажется, что последний li под //*[@id="search-results"]/div[2]/div/div/ul/ обозначает шеврон.


ОРИГИНАЛЬНЫЙ ПОСТ:

Вы можете попробовать подождать, пока страница загрузится, прежде чем пытаться найти и щелкнуть шеврон.Я обычно просто делаю time.sleep(...), когда тестирую свой скрипт автоматизации, но для (возможно) более сложных функций попробуйте Waits.См. Документацию здесь .

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