Невозможно получить данные элемента "WebDriver", если они не "видимы для глаз" в браузере с использованием Selenium и Python - PullRequest
0 голосов
/ 21 сентября 2018

Я делаю соскоб с Selenium в Python.Моя проблема в том, что после того, как я нашел все WebElements, я не могу получить их информацию (id, текст и т. Д.), Если элемент не действительно ВИДИМО В браузере, открытом с Selenium.

Я имею в виду, что:

Первое изображение

Второе изображение

Как видно из первого и второго изображений, у меня есть первое4 «таблицы», которые «видны» для меня и для кода.Однако есть еще две таблицы (5 и 6 Getthoy luck & Sue Specs), которые не «видны» до тех пор, пока я не перетащу правую полосу.

Вот что я получаю, когда пытаюсь получить информацию об элементебез «видения» на странице:

Третье изображение

Ручное перетаскивание страницы вниз и, следовательно, ее «видимость» для человеческого глаза (итакже к коду ???) это единственный способ, которым я могу получить данные нужного мне элемента WebDriver:

Четвертое изображение

Чего мне не хватает?Почему Selenium не может сделать это в фоновом режиме?Есть ли способ решить эту проблему, не переходя вверх и вниз по странице?

PS: страница может быть любой страницы гонки собак в http://greyhoundbet.racingpost.com/. Просто нажмите Город - Время - и затем ФОРМА.


Вот часть моего кода:

# I call this function with the URL and it returns the driver object
def open_main_page(url):
chrome_path = r"c:\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.get(url)

# Wait for page to load
loading(driver, "//*[@id='showLandingLADB']/h4/p", 0)
element = driver.find_element_by_xpath("//*[@id='showLandingLADB']/h4/p")
element.click()

# Wait for second element to load, after click
loading(driver, "//*[@id='landingLADBStart']", 0)
element = driver.find_element_by_xpath("//*[@id='landingLADBStart']")
element.click()

# Wait for main page to load.
loading(driver, "//*[@id='whRadio']", 0)
return driver

Теперь у меня есть браузер "драйвер", который я могу использовать, чтобы найти нужные элементы

url = "http://greyhoundbet.racingpost.com/#card/race_id=1640848&r_date=2018- 
09-21&tab=form"
browser = open_main_page(url)

# Find dog names
names = []
text: str
tags = browser.find_elements_by_xpath("//strong")

Теперь "TAGS" - это список элементов WebDriver, как на рисунках.

Я довольно новичок в этой области.


ОБНОВЛЕНИЕ: я решил проблему с обходным путем кода.

tags = driver.find_elements_by_tag_name("strong")

for tag in tags:
    driver.execute_script("arguments[0].scrollIntoView();", tag)
    print(tag.text)

Таким образом, браузер переместится в положение элемента и сможет получить информацию.

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

...