Я делаю соскоб с 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)
Таким образом, браузер переместится в положение элемента и сможет получить информацию.
Однако я до сих пор не знаю, почему именно с этой страницей я 'я не могу читать элементы веб-страниц, которые не видны в области браузера, пока я не прокручиваю и не вижу их буквально.