我正在Python中使用Selenium进行抓取。我的问题是,找到所有WebElement之后,如果在使用Selenium打开的浏览器中该元素不是真正可见的,我将无法获取其信息(ID,文本等)。
我的意思是:
从第一张图片和第二张图片中可以看到,我有对我和代码“可见”的前四个“表”。但是,还有2个表(5和6 Gettho幸运抽奖和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)
通过这种方式,浏览器将移动到元素位置,并且能够获取其信息。
但是我仍然不知道为什么特别要使用此页面,直到我滚动并从字面上看到它们,我才能读取在浏览器区域不可见的网页元素。