zoukankan      html  css  js  c++  java
  • XPath和Selenium的使用

    一、xpath选择器

    XPath 是一门在 XML 文档中查找信息的语言

    /:	——># 从根节点选取:
    
    //:	——># 不管位置,直接找
    
    /@属性名	  ——># 获取对应属性值
    
    /text()		——># 获取文本内容
    

    使用方式:

    from lxml import etree
    
    html = etree.HTML(html_doc)		# html_doc 指的是HTML文档内容
    
    # 1.所有节点
    html.xpath('//*')
    
    # 2.指定节点
    html.xpath('//head')
    
    # 3.子节点,子孙节点
    html.xpath('//body/a')
    html.xpath('//body//a')
    
    # 4.父节点
    html.xpath('//body//a[@href="image.html"]/..')
    
    # 5.属性匹配
    html.xpath('//body//a[@href="image.html"]')
    
    # 6.文本获取
    html.xpath('//body//a[@href="image.html"]/text()')
    
    # 7.获取属性
    html.xpath('//body//a/@href')
    
    # 8.属性多值匹配
    html.xpath('//body//a[contains(@class,"li")]/text()')
    
    # 9.多属性匹配
    html.xpath('//body//a[contains(@class,"li") and @name="items"]/text()')
    
    # 10.按序匹配(从1开始)
    html.xpath('//a[2]/text()')
    

    二、Selenium

    Selenium 是为了解决 requests 无法直接执行 JavaScript 代码的问题。

    本质是通过驱动浏览器,完全模拟浏览器的操作,输入、点击、下拉等。

    安装:pip install selenium

    使用需要下载浏览器驱动:http://npm.taobao.org/mirrors/chromedriver/

    并且驱动要跟浏览器版本对应

    简单使用模拟百度搜索:

    import time
    
    from selenium import webdriver
    
    bro = webdriver.Chrome(executable_path='./chromedriver.exe')  # 得到一个谷歌浏览器对象,并指定使用那个驱动
    
    bro.implicitly_wait(5)  # 隐士等待:找一个控件,如果控件没有加载出来,就等待5S,只需要写着一句,以后所有控件都按照这个操作来
    
    bro.get('https://www.baidu.com')  # 在地址栏里输入百度
    
    input_k = bro.find_element_by_id('kw')  # 找到百度输入框对应的控件
    
    input_k.send_keys('python')  # 框里面输入python
    
    sou = bro.find_element_by_id('su')  # 找到搜索按钮
    
    sou.click()  # 点击搜索按钮
    
    time.sleep(3)
    
    bro.close()  # 关闭浏览器
    

    find选择器

    Selenium 中有内置的选择器对 html 文件内容进行选择处理

    选择方法:

    1、find_element_by_id   			# 通过id查找控件
    2、find_element_by_link_text  	# 通过a标签内容找
    3、find_element_by_partial_link_text  	# 通过a标签内容找,模糊匹配
    4、find_element_by_tag_name   	# 标签名
    5、find_element_by_class_name  	# 类名
    6、find_element_by_name      	# name属性
    7、find_element_by_css_selector  # 通过css选择器
    8、find_element_by_xpath       	# 通过xpaht选择器
    
    # 注意:
    find_elements_by_xxx 的形式是查找到多个元素,结果为列表
    

    使用方法示例:

    from selenium import webdriver
    
    bro = webdriver.Chrome(executable_path='./chromedriver.exe')
    
    bro.implicitly_wait(5)
    
    bro.get('https://www.cnblogs.com/XiaoYang-sir/p/15077518.html')
    
    tag = bro.find_element_by_id('_label1')  # 找到id=_label1的标签
    print(tag.text)  # 获取文本内容
    
    bro.close()
    

    其他操作:

    tag.get_attribute('href')  # 找当前控件 的href属性对的值
    tag.text   		# 获取文本内容
    
    tag.id   		# 当前控件id号
    tag.location  	# 当前控件在页面位置
    tag.tag_name  	# 标签名
    tag.size     	# 标签的大小
    
    bro.delete_all_cookies()	# 获取cookie
    

    元素交互

    tag.send_keys()  # 往里面写内容
    tag.click()      # 点击控件
    tag.clear()      # 清空控件内容
    

    执行 JS 代码

    bro.execute_script('window.open()')	# 打开浏览器后执行js代码
    

    无界面浏览器

    谷歌浏览器支持不打开页面进行操作

    from selenium.webdriver.chrome.options import Options
    from selenium import webdriver
    
    chrome_options = Options()
    chrome_options.add_argument('window-size=1920x3000')  # 指定浏览器分辨率
    chrome_options.add_argument('--disable-gpu')  # 谷歌文档提到需要加上这个属性来规避bug
    chrome_options.add_argument('--hide-scrollbars')  # 隐藏滚动条, 应对一些特殊页面
    chrome_options.add_argument('blink-settings=imagesEnabled=false')  # 不加载图片, 提升速度
    chrome_options.add_argument('--headless')  # 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
    
    bro = webdriver.Chrome(chrome_options=chrome_options,executable_path='./chromedriver.exe')
    
    bro.get('https://www.baidu.com/')
    print(bro.page_source)
    bro.close()
    
    学习之旅
  • 相关阅读:
    redis:aof恢复与rdb服务器间迁移
    redis的主从服务器配置
    redis:消息发布与订阅频道
    redis:hash哈希类型的操作
    redis:order set有序集合类型的操作(有序集合)
    redis:set集合类型的操作(无序集合)
    redis:list列表类型的操作
    C#之多线程
    C# 操作FTP
    C# 导出导入TXT文件
  • 原文地址:https://www.cnblogs.com/XiaoYang-sir/p/15173174.html
Copyright © 2011-2022 走看看