如果使用Selenium和Python在浏览器中不“可见”,则无法获取“ WebDriver”元素数据

时间:2018-09-21 11:17:50

标签: python selenium web-scraping webdriver chrome-web-driver

我正在Python中使用Selenium进行抓取。我的问题是,找到所有WebElement之后,如果在使用Selenium打开的浏览器中该元素不是真正可见的,我将无法获取其信息(ID,文本等)。

我的意思是:

First image

Second image

从第一张图片和第二张图片中可以看到,我有对我和代码“可见”的前四个“表”。但是,还有2个表(5和6 Gettho幸运抽奖和Sue Specs)在我向下拖动右栏之前是不可见的。

这是我尝试获取元素信息而在页面中没有“看到”的信息:

Third image

手动将页面拖到底部,使它对人眼(以及代码???)可见,这是我可以从所需的WebDriver元素中获取数据的唯一方法:

Fourth image

我想念什么?为什么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)

通过这种方式,浏览器将移动到元素位置,并且能够获取其信息。

但是我仍然不知道为什么特别要使用此页面,直到我滚动并从字面上看到它们,我才能读取在浏览器区域不可见的网页元素。

0 个答案:

没有答案