我使用Selenium尝试从网站获取数据。但我想要的数据存储在“隐藏”状态。标签,所以当我拉动源时它是不可见的。有没有办法解决这个问题?是否有不同类型的隐藏?
我认为它是隐藏的,因为我也使用Firebug,它可以看到我试图刮擦的页面上的来源,但它会变灰'该来源,我已经阅读过,表明该来源隐藏了样式:隐藏标记。
答案 0 :(得分:1)
可能发生的是网站通过JavaScript和/或XMLHttpRequest或通过CSS加载其他数据。一旦完成,Firebug会向您显示DOM。使用Webdriver,您可以在浏览器中加载页面并与之交互。一旦有特定的用户交互,就会出现一些附加信息。因此,缓解这种情况的一种方法是使用webdriver来引导浏览器并执行相同的操作序列,以便DOM相应地更改。
您可能希望使用CSS来更改属性并使元素也可见。
鉴于您没有提供您尝试做的任何代码示例,精确帮助您是不现实的。但是你会在官方文档中找到很多webdriver code examples的python。
答案 1 :(得分:0)
我使用Selenium进行抓取的具体原因之一是确保在开始搜索内容之前,每个页面的javascript创建部分都已完全呈现。我用这行来等待我想要加载的内容:
WebDriverWait(self.driver, 30).until(EC.presence_of_element_located((By.XPATH, my_xpath)))
'30'是一个30秒的等待计时器,如果超过此时间,则会发生TimeoutException,因此您需要将其放在try ... except:
块中。更改my_xpath
以匹配您想要的标记。即使样式被标记为隐藏,Selenium仍然可以看到它。