Элемент не прикреплен - селен в Python - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь удалить данные с нескольких страниц на сайте, используя selenium в python. Синтаксис запускает и удаляет данные на первой странице, но после второй страницы не может найти кнопку щелчка и прекратить очистку. Я проверяю HTML коды веб-страницы, но элемент на второй странице такой же, как элемент на первой странице. Я нашел этот вопрос , связанный с той же проблемой. Я думаю, что проблема вызвана тем, что ссылка на кнопку теряется после изменения DOM, но я все еще не могу исправить проблему должным образом. Буду признателен за любые предложения или решения. Синтаксис и результаты приведены ниже:

browser = webdriver.Chrome(r"C:\Users\...\chromedriver.exe")
browser.get('https://fortune.com/global500/2019/walmart')

table = browser.find_element_by_css_selector('tbody')

data =[]

#Use For Loop for Index

i = 1
while True:
    if i > 5:
        break
    try:
        print("Scraping Page no. " + str(i))
        i = i + 1

        # Select rows in the table
        for row in table.find_elements_by_css_selector('tr'):
            cols = data.append([cell.text for cell in row.find_elements_by_css_selector('td')])

        try:
            WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH,'//span[@class="singlePagination__icon--2KbZn"]')))
            time.sleep(10)
        finally:
            browser.find_element_by_xpath('//span[@class="singlePagination__icon--2KbZn"]').click()

    except Exception as e:
        print(e)
        break


data1 = pd.DataFrame(data, columns=['Labels','Value'])

print(data1)

browser.close()

вывод :

Scraping Page no. 1
Scraping Page no. 2
Message: stale element reference: element is not attached to the page document
 (Session info: chrome=....)

                     Labels                    Value
0                      (...)                   (...)
1                      (...)                   (...)

1 Ответ

0 голосов
/ 02 марта 2020

переместите table = browser.find_element_by_css_selector('tbody') строку в вашу while l oop. Так что вы получите самую последнюю ссылку на элемент таблицы как часть каждого l oop, и тогда вы не увидите никаких проблем с устаревшими элементами.

while True:
    table = browser.find_element_by_css_selector('tbody')
    if i > 5:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...