这里就利用execute_script()方法将进度条下拉到最底部,然后弹出alert提示框。
所以说有了这个方法,基本上API没有提供的所有功能都可以用执行JavaScript的方式来实现了。
9. 获取节点信息
前面说过,通过page_source属性可以获取网页的源代码,接着就可以使用解析库(如正则表达式、Beautiful Soup、pyquery等)来提取信息了。
不过,既然Selenium已经提供了选择节点的方法,返回的是WebElement类型,那么它也有相关的方法和属性来直接提取节点信息,如属性、文本等。这样的话,我们就可以不用通过解析源代码来提取信息了,非常方便。
接下来,就看看通过怎样的方式来获取节点信息吧。
获取属性
我们可以使用get_attribute()方法来获取节点的属性,但是其前提是先选中这个节点,示例如下:
1
2
3
4
5
6
7
8
|
from selenium import webdriver from selenium.webdriver import ActionChains browser = webdriver.Chrome() url = 'https://www.zhihu.com/explore' browser.get(url) logo = browser.find_element_by_id( 'zh-top-link-logo' ) print (logo) print (logo.get_attribute( 'class' )) |
运行之后,程序便会驱动浏览器打开知乎页面,然后获取知乎的logo节点,最后打印出它的class。
控制台的输出结果如下:
1
2
3
|
<selenium.webdriver.remote.webelement.WebElement (session= "e08c0f28d7f44d75ccd50df6bb676104" , element="0.723639066 0048155-1")> zu-top-link-logo |
通过get_attribute()方法,然后传入想要获取的属性名,就可以得到它的值了。
获取文本值
每个WebElement节点都有text属性,直接调用这个属性就可以得到节点内部的文本信息,这相当于Beautiful Soup的get_text()方法、pyquery的text()方法,示例如下:
1
2
3
4
5
6
|
from selenium import webdriver browser = webdriver.Chrome() url = 'https://www.zhihu.com/explore' browser.get(url) input = browser.find_element_by_class_name( 'zu-top-add-question' ) print (input.text) |
这里依然先打开知乎页面,然后获取“提问”按钮这个节点,再将其文本值打印出来。
控制台的输出结果如下:
1
|
|
获取id、位置、标签名和大小
另外,WebElement节点还有一些其他属性,比如id属性可以获取节点id,location属性可以获取该节点在页面中的相对位置,tag_name属性可以获取标签名称,size属性可以获取节点的大小,也就是宽高,这些属性有时候还是很有用的。示例如下:
1
2
3
4
5
6
7
8
9
|
from selenium import webdriver browser = webdriver.Chrome() url = 'https://www.zhihu.com/explore' browser.get(url) input = browser.find_element_by_class_name( 'zu-top-add-question' ) print (input.id) print (input.location) print (input.tag_name) print (input.size) |