Selenium Webdriver не выполняет JavaScript - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь почистить данные со страницы продукта Aliexpress. пример.

Мне нужен этот раздел. (история транзакций)

мой код:

from selenium.webdriver.chrome.options import Options
from selenium import webdriver
my_url = 'https://www.aliexpress.com/item/Cosmetic-Brush-Makeup-Blusher-Eye-Shadow-Kabuki-Brushes-Set-Tool-Kit-22pcs/32765190537.html?ws_ab_test=searchweb0_0'
chrome_options = Options()  
chrome_options.add_argument("--enable-javascript")
driver = webdriver.Chrome(chrome_options=chrome_options)  
driver.get(my_url)
innerHTML = driver.execute_script('return document.getElementsByTagName("html")[0].innerHTML')
page_html = driver.page_source

Когда я запускаю

document.getElementsByTagName ("html") [0] .innerHTML

на консоли Chrome, я получаю весь HTML, включая нужный мне раздел.но, innerHTML-объект дает мне тот же html, что и driver.page_source (без нужного мне раздела), насколько я знаю, этот раздел не находится в iFrame.

Некоторая помощь, пожалуйста: -)

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Операции генерируются после того, как ID элемента j-transaction-feedback виден, вам нужно прокрутить до элемента и дождаться завершения Ajax-запроса.

from selenium.webdriver.support.ui import WebDriverWait

....
....
driver.get(my_url)

# scroll to the element
driver.find_element_by_css_selector('#j-transaction-feedback').location_once_scrolled_into_view

# wait until Ajax finished and render the element
transaction = WebDriverWait(driver, 15).until(
    lambda d: d.find_element_by_css_selector('.transaction-feedback-content')
)
total_transaction = driver.find_element_by_css_selector('#j-transaction-feedback .text')
page_source = driver.page_source

print('total_transaction: ' + total_transaction.text)
0 голосов
/ 21 января 2019

Вы, вероятно, хотите найти эту конкретную таблицу. Использование

innerHTML = document.querySelectorAll ('table.transaction-feedback-table');

enter image description here

Вероятно, найдет его

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