提问人:Piero Costa 提问时间:9/21/2018 最后编辑:Piero Costa 更新时间:9/24/2018 访问量:288
如果使用 Selenium 和 Python 在浏览器中不“眼睛可见”,则无法获取“WebDriver”元素数据
Can't get "WebDriver" element data if not "eye-visible" in browser using Selenium and Python
问:
我正在 Python 中使用 Selenium 进行抓取。我的问题是,在我找到所有 WebElements 后,如果元素在使用 Selenium 打开的浏览器中并不真正可见,我将无法获得它们的信息(id、文本等)。
我的意思是:
从第一张和第二张图片中可以看出,我有前 4 个“表”,它们对我和代码都是“可见的”。然而,还有另外2张桌子(5和6 Gettho lucky dip & 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)
以这种方式,浏览器将移动到元素位置,并且它将能够获取其信息。
但是,我仍然不知道为什么特别是对于此页面,我无法阅读在浏览器区域中不可见的网页元素,直到我滚动并真正看到它们。
答: 暂无答案
评论