航空网站建设,专门做网站的公司有哪些,去哪里可以做网站,中国保密在线培训网站目录
1. 初始化浏览器对象和访问页面
2. 查找节点及节点交互
2.1 查找单个节点
#xff08;1#xff09;获取方法1——特定方法
#xff08;2#xff09;通用方法
2.2 查找多个节点
2.3 节点交互
3. 动作链
4. 执行 JavaScript 之下拉进度条
5. 获取节点信息
5.…目录
1. 初始化浏览器对象和访问页面
2. 查找节点及节点交互
2.1 查找单个节点
1获取方法1——特定方法
2通用方法
2.2 查找多个节点
2.3 节点交互
3. 动作链
4. 执行 JavaScript 之下拉进度条
5. 获取节点信息
5.1 获取属性
5.2 获取文本值
5.3 获取 ID、位置、标签名、大小 1. 初始化浏览器对象和访问页面
from selenium import webdriverbrowser webdriver.Chrome() # 初始化浏览器对象
browser.get(https://www.taobao.com/) # 访问淘宝页面
print(browser.page_source) # 得到页面源代码
browser.close() 运行代码之后会自动弹出窗口并访问淘宝输出网页HTML代码。
2. 查找节点及节点交互 Selenium可以驱动浏览器完成各种操作例如填充表单、模拟点击、输入等。但想要点击、输入等需要找到输入的地方即节点之后点击、输入即节点交互。
2.1 查找单个节点 下面我们以淘宝网为例 这是个输入的表单节点之后我们获取它。可以发现这个input节点 id属性为 qnameq等等我们可以通过其属性去获取节点(属性多种获取方式也多种)。
1获取方法1——特定方法 以下是所有特定方法
browser.find_element_by_id()
browser.find_element_by_name()
browser.find_element_by_css_selector() # CSS选择器
browser.find_element_by_xpath()
browser.find_element_by_link_text()
browser.find_element_by_partial_link_text()
browser.find_element_by_tag_name()
browser.find_element_by_class_name()
2通用方法 find_element(查找方法方式的取值)使用这个最好先from selenium.webdriver.common.by import By方便使用。
from selenium import webdriver
from selenium.webdriver.common.by import Bybrowser webdriver.Chrome() # 初始化浏览器对象
browser.get(https://www.taobao.com/) # 访问淘宝页面
inputElement1 browser.find_element_by_id(q)
# inputElement11 browser.find_element(By.ID, q) # 通用方法
inputElement2 browser.find_element_by_css_selector(#q)
inputElement3 browser.find_element_by_xpath(//*[idq])
print(inputElement1, inputElement2, inputElement3) # 三个值相同browser.close() 2.2 查找多个节点 例如下面的导航条 获取方法在前面单个节点的两个获取方法的element加s即可返回的是个列表。
from selenium import webdriverbrowser webdriver.Chrome() # 初始化浏览器对象
browser.get(https://www.taobao.com/) # 访问淘宝页面
inputElement browser.find_elements_by_css_selector(.nav-hd li)
print(inputElement)browser.close() 2.3 节点交互 现要浏览器自动去淘宝搜索ipad我们需要先驱动浏览器打开淘宝获取输入框节点再使用send_keys方法输入文字获取搜索按钮节点用 click 方法点击按钮。 from selenium import webdriver
from selenium.webdriver.common.by import Bybrowser webdriver.Chrome() # 初始化浏览器对象
browser.get(https://www.taobao.com/) # 访问淘宝页面
inputElement browser.find_element_by_id(q) # 获取输入框节点
inputElement.send_keys(ipad) # 输入文字
findButton browser.find_element_by_css_selector(.search-button button)
# 获取搜索按钮节点
findButton.click() # 点击按钮 运行程序可以看到过程。因为没有登陆所以会停留在登陆页面。更多操作可看官方文档介绍7. WebDriver API — Selenium Python Bindings 2 documentation。
3. 动作链 在前面交互操作都是针对某个节点执行的。还有一些操作妹纸特定的执行对象比如鼠标拖拽、键盘按键等需要用另一种方式执行那就是动作链。 例如可以这样实现拖拽节点的操作将某个节点从一处拖拽至另一处
实例链接菜鸟教程在线编辑器 现用代码实现拖拽
from selenium import webdriver
from selenium.webdriver import ActionChainsbrowser webdriver.Chrome()
url http://www.runoob.com/try/try.php?filenamejqueryui-api-droppable
browser.get(url)
browser.switch_to.frame(iframeResult)
source browser.find_element_by_css_selector(#draggable)
target browser.find_element_by_css_selector(#droppable)
actions ActionChains(browser)
actions.drag_and_drop(source, target)
actions.perform() browser.switch_to.frame(iframeResult)用于内嵌使之后的source能嵌入target因为要凸显效果特定加入。 依次选中要拖曳的节点source和拖曳到的目标节点target接着声明 ActionChains 对象并将其赋值为 actions 变量然后通过调用 actions 变量的 drag_and_drop() 方法再调用 perform() 方法执行动作此时就完成了拖曳操作。
结果 更多的动作链操作可以参考官方文档的动作链介绍7. WebDriver API — Selenium Python Bindings 2 documentation
4. 执行 JavaScript 之下拉进度条 对于某些操作Selenium API 并没有提供。比如下拉进度条它可以直接模拟运行 JavaScript此时使用 execute_script() 方法即可实现(双引号中为固定代码多个网站都适用)代码如下
from selenium import webdriverbrowser webdriver.Chrome()
# browser.get(https://www.zhihu.com/explore)
browser.get(https://news.baidu.com/)
browser.execute_script(window.scrollTo(0, document.body.scrollHeight))
browser.execute_script(alert(To Bottom)) 有了这个方法基本上 API 没有提供的所有功能都可以用执行 JavaScript 的方式来实现了。
5. 获取节点信息 前面说过通过 page_source 属性可以获取网页的源代码接着就可以使用解析库如正则表达式、Beautiful Soup、pyquery 等来提取信息了。 不过既然 Selenium 已经提供了选择节点的方法返回的是 WebElement 类型那么它也有相关的方法和属性来直接提取节点信息如属性、文本等。这样的话我们就可以不用通过解析源代码来提取信息了非常方便。
接下来就看看通过怎样的方式来获取节点信息吧。
5.1 获取属性 可以使用 get_attribute() 方法来获取节点的属性但是其前提是先选中这个节点示例如下获得百度这个logo的class属性。 from selenium import webdriverbrowser webdriver.Chrome()
url https://www.baidu.com/
browser.get(url)
baiduLogo browser.find_element_by_id(lg)
print(baiduLogo)
print(baiduLogo.get_attribute(class))
输出:selenium.webdriver.remote.webelement.WebElement(sessionae1b17e9e092f2155263522772036f37, elementf.25E08F3EDDDDC250A5E5784201893A30.d.2BB430665B7C306121BC019488525624.e.10)
s-p-top
5.2 获取文本值 每个 WebElement 节点都有 text 属性直接调用这个属性就可以得到节点内部的文本信息。 from selenium import webdriverbrowser webdriver.Chrome()
url https://www.baidu.com/
browser.get(url)
content browser.find_element_by_class_name(title-content-title)
print(content.text)
browser.close()# 输出
# 大力推动我国新能源高质量发展
5.3 获取 ID、位置、标签名、大小 上述同样的方法找到获取节点用属性即可。
节点.id
节点.location
节点.tag_name
节点.size
本人新手若有错误欢迎指正若有疑问欢迎讨论。若文章对你有用点个小赞鼓励一下谢谢一起加油吧