zoukankan      html  css  js  c++  java
  • python学习第六天

    selenium选择之Xpath

    根据xpath语法查找,从/根节点开始找第一个

    html=driver.find_element_by_xpath('/html')
        html=driver.find_element_by_xpath('/head')#报错,因为根部是从html开始的
        print(html.tag_name)
    //表示节点开始找任意一个节点
     div = driver.find_element_by_xpath('//div')
        print(div.tag_name)
    查找id为imagesdediv标签
    div = driver.find_element_by_xpath('//div[@id="images"]')
        print(div.tag_name)
        print(div.text)
    找到第一个a节点
     a = driver.find_element_by_xpath('//a')
        print(a.tag_name)
    找到所有a节点
    a_s= driver.find_elements_by_xpath('//a')#注意这里用了elements
        print(a_s)
    找到第一个a节点的href属性
    #get_attribute:获取节点中某个属性
        a = driver.find_element_by_xpath('//a').get_attribute('href')
        print(a)

    完整代码为:

    from selenium import webdriver
    import  time
    driver=webdriver.Chrome()
    
    driver.maximize_window()
    
    try:
        #隐式等待,写在get请求之前###若为显示等待,写在get请求之后
        driver.implicitly_wait(10)
        driver.get('https://doc.scrapy.org/en/latest/_static/selectors-sample1.html')
      
    
    
    
        #根据xpath语法查找
        #从/根节点开始找第一个
        html=driver.find_element_by_xpath('/html')
        html=driver.find_element_by_xpath('/head')#报错
        print(html.tag_name)
    
        #//从根节点开始找任意一个节点
        div = driver.find_element_by_xpath('//div')
        print(div.tag_name)
    
    
        #@
        #查找id为imagesdediv标签
        div = driver.find_element_by_xpath('//div[@id="images"]')
        print(div.tag_name)
        print(div.text)
    
        #找到第一个a节点
        a = driver.find_element_by_xpath('//a')
        print(a.tag_name)
    
        #找到所有a节点
        a_s= driver.find_elements_by_xpath('//a')
        print(a_s)
    
        #找到第一个a节点的href属性
        #get_attribute:获取节点中某个属性
        a = driver.find_element_by_xpath('//a').get_attribute('href')
        print(a)
    
    
    
    finally:
        driver.close()

    实现自动打开三个网页,自动前进回退的过程

    '''
    前进、后退
    '''
    from selenium import webdriver
    import time
    
    driver = webdriver.Chrome()
    
    driver.maximize_window()
    try:
        driver.implicitly_wait(10)
        driver.get('https://www.jd.com/')
        driver.get('https://www.baidu.com/')
        driver.get('https://www.cnblogs.com/')
    
        time.sleep(2)
    
        # 回退操作
        driver.back()
        time.sleep(1)
        # 前进操作
        driver.forward()
        time.sleep(1)
        driver.back()
        time.sleep(10)
    
    finally:
        driver.close()

    用selenium实现自动那个登录京东输入“围城”后自动清除再搜索“墨菲定律”的过程

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import  time
    driver=webdriver.Chrome()
    
    driver.maximize_window()
    
    try:
        driver.implicitly_wait(10)
            #往京东发送请求
        driver.get('http://www.jd.com/')
          #找到输入框输入围城
        input_tag=driver.find_element_by_id('key')
        input_tag.send_keys('围城')
    #键盘回车
        input_tag.send_keys(Keys.ENTER)
        time.sleep(2)
    #找到输入框输入墨菲定律
        input_tag=driver.find_element_by_id('key')
        input_tag.clear()
        input_tag.send_keys('墨菲定律')
    #找到搜索按钮点击搜索
        button=driver.find_element_by_class_name('button')
        button.click()
        time.sleep(10)
    
    finally:
        driver.close()

    选项卡之向一个网页发送百度请求后,新建一个选项卡,为其请求淘宝链接,返回第一个时又向新浪发送链接

    '''
    选项卡
    '''
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import  time
    browser=webdriver.Chrome()
    
    browser.maximize_window()
    
    try:
        browser.implicitly_wait(10)
        browser.get('http://www.baidu.com/')
    
        #execute_script:执行javascript代码
        #弹窗操作
        #browser.execute_script( 'alert("zmm")')
    
        #新建浏览器窗口
        browser.execute_script( '''
        window.open()
        ''')
    
        print(browser.window_handles)#获取所有选项卡
        #切换到第二个窗口
        #新的表示法
        #browser.switch_to.window(browser.window_handles[1])
        #旧的
        browser.switch_to_window(browser.window_handles[1])
    
    
        #网第二个窗口发送淘宝请求
        browser.get("http://www.taobao.com/")
        time.sleep(5)
    
        #切换到第一个窗口
        browser.switch_to_window(browser.window_handles[0])
        browser.get("http://www.sina.com/")
    
        time.sleep(10)
    
    
    finally:
        browser.close()

    通过selenium爬取京东第一页macbook的代码:

    '''
    请求url:
        https://www.jd.com/
    提取商品信息
        1、商品详情页
        2、商品名称
        3、商品价格
        4、评鉴人数
        5商品商家
    '''
    from selenium import webdriver
    import time
    from selenium.webdriver.common.keys import Keys
    
    driver = webdriver.Chrome()
    
    driver.maximize_window()
    
    try:
        # 隐式等待,写在get请求之前###若为显示等待,写在get请求之后
        driver.implicitly_wait(10)
        #1往京东主页发送请求
        driver.get('https://www.jd.com/')
    
        #2、输入商品名称,并输入回车
        input_tag=driver.find_element_by_id('key')
        input_tag.send_keys('macbook')
        input_tag.send_keys(Keys.ENTER)
    
        #3查找所商品div
        good_list=driver.find_elements_by_class_name('gl-item')
        for good in good_list:
            #根据属性选择器查找
            #商品链接
            good_url=good.find_element_by_css_selector('.p-img a').get_attribute('href')
    
            #商品名称
            good_name=good.find_element_by_css_selector('.p-name em').text.replace("
    ","--")
    
            #商品价格
            good_price=good.find_element_by_class_name('p-price').text.replace("
    ",":")
    
            #评价人数
            good_commit=good.find_element_by_class_name('p-commit').text.replace("
    "," ")
    
            #尚品尚家
            good_from = good.find_element_by_class_name('J_im_icon').text.replace("
    ", " ")
    
            good_content=f'''
                            商品链接:{good_url}
                            商品名称:{good_name}
                            商品价格:{good_price}
                            评价人数:{good_commit}
                            商品商家:{good_from}
                            
            
            
            '''
    
            print(good_content)
            with open('jd.txt','a',encoding='utf-8') as f:
                f.write(good_content)
        time.sleep(10)
    
    
    finally:
        driver.close()

    增加滚轮模块和爬取京东所有内容的代码:

    '''
    爬取京东商品信息:
        请求url:
            https://www.jd.com/
        提取商品信息:
            1.商品详情页
            2.商品名称
            3.商品价格
            4.评价人数
            5.商品商家
    '''
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import time
    
    
    def get_good(driver):
        try:
    
            # 通过JS控制滚轮滑动获取所有商品信息
            js_code = '''
                window.scrollTo(0,5000);
            '''
            driver.execute_script(js_code)  # 执行js代码
    
            # 等待数据加载
            time.sleep(2)
    
            # 3、查找所有商品div
            # good_div = driver.find_element_by_id('J_goodsList')
            good_list = driver.find_elements_by_class_name('gl-item')
            n = 1
            for good in good_list:
                # 根据属性选择器查找
                # 商品链接
                good_url = good.find_element_by_css_selector(
                    '.p-img a').get_attribute('href')
    
                # 商品名称
                good_name = good.find_element_by_css_selector(
                    '.p-name em').text.replace("
    ", "--")
    
                # 商品价格
                good_price = good.find_element_by_class_name(
                    'p-price').text.replace("
    ", ":")
    
                # 评价人数
                good_commit = good.find_element_by_class_name(
                    'p-commit').text.replace("
    ", " ")
    
                good_content = f'''
                            商品链接: {good_url}
                            商品名称: {good_name}
                            商品价格: {good_price}
                            评价人数: {good_commit}
                            
    
                            '''
                print(good_content)
                with open('jd.txt', 'a', encoding='utf-8') as f:
                    f.write(good_content)
    
            next_tag = driver.find_element_by_class_name('pn-next')
            next_tag.click()
    
            time.sleep(2)
    
            # 递归调用函数
            get_good(driver)
    
            time.sleep(10)
    
        finally:
            driver.close()
    
    
    if __name__ == '__main__':
    
        good_name = input('请输入爬取商品信息:').strip()
    
        driver = webdriver.Chrome()
        driver.implicitly_wait(10)
        # 1、往京东主页发送请求
        driver.get('https://www.jd.com/')
    
        # 2、输入商品名称,并回车搜索
        input_tag = driver.find_element_by_id('key')
        input_tag.send_keys(good_name)
        input_tag.send_keys(Keys.ENTER)
        time.sleep(2)
    
        get_good(driver)

    通过今天的学习,又学到新的lenium模块,学习新的知识痛并快乐着,期待下次课程的学习。

  • 相关阅读:
    第一次作业
    冯娟的第五次作业
    冯娟的第三次作业
    冯娟的第四次作业
    冯娟的第二次作业
    数据压缩第一次作业
    第二次实验
    第三次实验
    第一次实验
    第五次作业
  • 原文地址:https://www.cnblogs.com/zmmm/p/11046853.html
Copyright © 2011-2022 走看看