zoukankan      html  css  js  c++  java
  • xpath选择器的使用,selenium使用

    一、xpath选择器使用

    # xpath: XPath 是一门在 XML 文档中查找信息的语言
    # / :从根节点选取。
    # // :不管位置,直接找
    # /@属性名
    # /text()
    # 会复制()


    doc='''
    <html>
    <head>
    <base href='http://example.com/' />
    <title>Example website</title>
    </head>
    <body>
    <div id='images'>
    <a href='image1.html' aa='bb'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>
    <a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>
    <a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>
    <a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>
    <a href='image5.html' class='li li-item' name='items'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>
    <a href='image6.html' name='items'><span><h5>test</h5></span>Name: My image 6 <br /><img src='image6_thumb.jpg' /></a>
    </div>
    </body>
    </html>
    '''

    from lxml import etree

    html=etree.HTML(doc)
    # html=etree.parse('search.html',etree.HTMLParser())
    # 1 所有节点
    # a=html.xpath('//*')

    # 2 指定节点(结果为列表)
    # a=html.xpath('//head')

    # 3 子节点,子孙节点
    # a=html.xpath('//div/a')
    # a=html.xpath('//body/a') #无数据
    # a=html.xpath('//body//a')


    # 4 父节点
    # a=html.xpath('//body//a[@href="image1.html"]/..')
    # a=html.xpath('//body//a[1]/..')
    # 也可以这样
    # a=html.xpath('//body//a[1]/parent::*')

    # 5 属性匹配
    # a=html.xpath('//body//a[@href="image1.html"]')

    # 6 文本获取(重要) /text() 取当前标签的文本
    # a=html.xpath('//body//a[@href="image1.html"]/text()')
    # a=html.xpath('//body//a/text()')

    # 7 属性获取 @href 取当前标签的属性
    # a=html.xpath('//body//a/@href')

    # # 注意从1 开始取(不是从0)
    # a=html.xpath('//body//a[1]/@href')
    # 8 属性多值匹配
    # a 标签有多个class类,直接匹配就不可以了,需要用contains
    # a=html.xpath('//body//a[@class="li"]')
    # a=html.xpath('//body//a[contains(@class,"li")]')
    # a=html.xpath('//body//a[contains(@class,"li")]/text()')
    # 9 多属性匹配
    # a=html.xpath('//body//a[contains(@class,"li") or @name="items"]')
    # a=html.xpath('//body//a[contains(@class,"li") and @name="items"]/text()')
    # a=html.xpath('//body//a[contains(@class,"li")]/text()')
    # 10 按序选择
    # a=html.xpath('//a[2]/text()')
    # a=html.xpath('//a[2]/@href')
    # 取最后一个
    # a=html.xpath('//a[last()]/@href')
    # 位置小于3的
    # a=html.xpath('//a[position()<3]/@href')
    # 倒数第二个
    # a=html.xpath('//a[last()-2]/@href')
    # 11 节点轴选择
    # ancestor:祖先节点
    # 使用了* 获取所有祖先节点
    # a=html.xpath('//a/ancestor::*')
    # # 获取祖先节点中的div
    # a=html.xpath('//a/ancestor::div')
    # attribute:属性值
    # a=html.xpath('//a[1]/attribute::*')
    # a=html.xpath('//a[1]/@aa')
    # child:直接子节点
    # a=html.xpath('//a[1]/child::*')
    # a=html.xpath('//a[1]/child::img/@src')
    # descendant:所有子孙节点
    # a=html.xpath('//a[6]/descendant::*')
    # a=html.xpath('//a[6]/descendant::h5/text()')
    # following:当前节点之后所有节点(兄弟节点和兄弟内部的节点)
    # a=html.xpath('//a[1]/following::*')
    # a=html.xpath('//a[1]/following::*[1]/@href')
    # following-sibling:当前节点之后同级节点(只找兄弟)
    # a=html.xpath('//a[1]/following-sibling::*')
    # a=html.xpath('//a[1]/following-sibling::a')
    # a=html.xpath('//a[1]/following-sibling::*[2]')
    # a=html.xpath('//a[1]/following-sibling::*[2]/@href')


    print(a)


    # /
    # //
    # /@属性名
    # /text()

    //以后去查找标签,bs4的find, css,xpath(通用的)

    二、selenium使用

    # 为了解决requests无法直接执行JavaScript代码的问题 
    # 
    
    
    # pip3 install selenium
    
    
    # 浏览器驱动:http://npm.taobao.org/mirrors/chromedriver/
    # 驱动要跟浏览器版本对应  84.0.4147.105:驱动用84.0.4147.30/
    # 下载完解压就是个exe(不同平台的可执行文件)
    # from selenium import webdriver
    # import time
    # # bro=webdriver.Chrome()  # 得到一个谷歌浏览器对象,
    # # 指定使用跟那个驱动
    # bro=webdriver.Chrome(executable_path='./chromedriver.exe') # 得到一个谷歌浏览器对象,
    #
    # time.sleep(2)
    # bro.get('https://www.baidu.com/')  # 在地址栏里输入了百度
    # time.sleep(2)
    # print(bro.page_source)
    # time.sleep(2)
    # bro.close()
    
    
    
    # 模拟登陆百度
    # from selenium import webdriver
    # import time
    # bro=webdriver.Chrome(executable_path='./chromedriver.exe')
    #
    # bro.get('https://www.baidu.com/')
    # time.sleep(0.01)
    # input_k=bro.find_element_by_id('kw')
    # input_k.send_keys('美女')  # 在框里写入美女
    # time.sleep(2)
    # sou=bro.find_element_by_id('su')  # 找到搜索按钮
    # sou.click() # 点击搜索按钮
    # time.sleep(4)
    # bro.close()
    
    
    # from selenium import webdriver
    # import time
    # bro=webdriver.Chrome(executable_path='./chromedriver.exe')
    # bro.implicitly_wait(5)  # 隐士等待:找一个控件,如果控件没有加载出来,等待5s中  等待所有,只需要写着一句,以后找所有控件都按这个操作来
    # bro.get('https://www.baidu.com/')
    #
    # d_button=bro.find_element_by_link_text('登录')
    #
    # d_button.click()
    #
    # login_u=bro.find_element_by_id('TANGRAM__PSP_11__footerULoginBtn')
    # login_u.click()
    #
    # username=bro.find_element_by_id('TANGRAM__PSP_11__userName')
    # username.send_keys('yxp654799481')
    # password=bro.find_element_by_id('TANGRAM__PSP_11__password')
    # password.send_keys('yxp997997')
    # time.sleep(3)
    # submit=bro.find_element_by_id('TANGRAM__PSP_11__submit')
    #
    # submit.click()
    # time.sleep(10)
    #
    # print(bro.get_cookies())
    #
    # bro.close()
    
    
    
    # ##############选择器(find系列)
    # ===============所有方法===================
    # 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选择器
    # 强调:
    
    # 1、find_elements_by_xxx的形式是查找到多个元素,结果为列表
    
    
    
    
    # 获取元素属性
    # 重点
    # tag.get_attribute('href')  # 找当前控件 的href属性对的值
    # tag.text   # 获取文本内容
    
    # 了解
    # print(tag.id)   # 当前控件id号
    # print(tag.location)  # 当前控件在页面位置
    # print(tag.tag_name)  # 标签名
    # print(tag.size)      #标签的大小
    
    
    
    ####无界面浏览器(phantomjs)
    #谷歌浏览器支持不打开页面
    # 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()
    
    
    ######元素交互
    # tag.send_keys()  # 往里面写内容
    # tag.click()      # 点击控件
    # tag.clear()      # 清空控件内容
    
    #####执行js(有什么用?)
    
    # from selenium import webdriver
    # import time
    # bro=webdriver.Chrome(executable_path='./chromedriver.exe')
    # bro.implicitly_wait(5)  # 隐士等待:找一个控件,如果控件没有加载出来,等待5s中  等待所有,只需要写着一句,以后找所有控件都按这个操作来
    # bro.get('https://www.baidu.com/')
    #
    #
    # bro.execute_script('window.open()')
    # bro.execute_script('window.open()')
    # time.sleep(2)
    # bro.close()
    
    
    ####模拟浏览器前进后退
    
    # from selenium import webdriver
    # import time
    # browser=webdriver.Chrome(executable_path='./chromedriver.exe')
    # browser.get('https://www.baidu.com')
    # browser.get('https://www.taobao.com')
    # browser.get('http://www.sina.com.cn/')
    #
    # browser.back()
    # time.sleep(1)
    # browser.forward()
    #
    # browser.close()
    
    
    #####获取cookie
    # bro.get_cookies()
    
    
    
    #### 选项卡管理(了解)
    # from selenium import webdriver
    # import time
    # browser=webdriver.Chrome()
    # browser.get('https://www.baidu.com')
    # browser.execute_script('window.open()')
    #
    # print(browser.window_handles) #获取所有的选项卡
    # browser.switch_to_window(browser.window_handles[1])
    # browser.get('https://www.taobao.com')
    # time.sleep(2)
    # browser.switch_to_window(browser.window_handles[0])
    # browser.get('https://www.sina.com.cn')
    # browser.close()
    
    
    
    ##### 异常处理
    # from selenium import webdriver
    # from selenium.common.exceptions import TimeoutException,NoSuchElementException,NoSuchFrameException
    # browser=webdriver.Chrome()
    # try:
    #
    #     browser.get('')
    # except Exception as e:
    #     print(e)
    # finally:
    #     # 无论是否出异常,最终都要关掉
    #     browser.close()
    
    
    
    #####动作链()
    
    
    #### 如何把屏幕拉倒最后(js控制)
    
    # bro.execute_script('window.scrollTo(0,document.body.offsetHeight)')
  • 相关阅读:
    cf C. Vasya and Robot
    zoj 3805 Machine
    cf B. Vasya and Public Transport
    cf D. Queue
    cf C. Find Maximum
    cf B. Two Heaps
    cf C. Jeff and Rounding
    cf B. Jeff and Periods
    cf A. Jeff and Digits
    I Think I Need a Houseboat
  • 原文地址:https://www.cnblogs.com/ltyc/p/14203502.html
Copyright © 2011-2022 走看看