zoukankan      html  css  js  c++  java
  • 爬虫之selenium

    一、selenium的介绍

    1.是一个自动化测试工具,模拟人的行为,做爬虫为了解决使用 requests模块无法执行ajax获取数据
    2.使用selenium+半人工登录,获取cookie---》给requests模块使用

    二、selenium的使用

    1 安装模块  pip3 install selenium
    2 驱动浏览器(需要浏览器驱动---》不同去不同浏览器官网下载),下载的驱动要跟浏览器版本对应
      http://npm.taobao.org/mirrors/chromedriver/
    3 以chrom(谷歌)浏览器为例

    三、基本使用

    # 模块装完了
    # 下一个谷歌浏览器驱动,放到项目根路径下
    
    
    # 开始使用

    from selenium import webdriver
     import time
    #  拿到一个谷歌浏览器对象
    #  打开谷歌浏览器(指定驱动在哪)
     bro=webdriver.Chrome(executable_path='chromedriver.exe')
    #  在地址栏输入http://www.baidu.com
     bro.get('http://www.cnblogs.com')

     print(bro.page_source) # 该页面的源代码
     time.sleep(5)
     # 关闭浏览器
     bro.close()

     

    3.2 无界面浏览器

    # import time
    # from selenium.webdriver.chrome.options import Options
    # 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(executable_path='chromedriver.exe',options=chrome_options)
    # bro.get('http://www.cnblogs.com')
    #
    # print(bro.page_source)
    # time.sleep(5)
    # # 关闭浏览器
    # bro.close()

    3.3 模拟登录百度

    from selenium import webdriver
    
    import time
    
    bro=webdriver.Chrome(executable_path='chromedriver.exe')
    
    bro.get('http://www.baidu.com')
    
    bro.implicitly_wait(100)  # 如果控件没有加载出来,会等一会
    
    
    # 根据a标签链接的文字来查找
    login_a=bro.find_element_by_link_text('登录')
    # 点击一下
    login_a.click()
    
    # 用户名登录的p标签,使用id找
    
    username_login_p=bro.find_element_by_id('TANGRAM__PSP_11__footerULoginBtn')
    username_login_p.click()
    
    # username_input=bro.find_element_by_id('TANGRAM__PSP_11__userName')
    username_input=bro.find_element_by_name('userName')
    # 写入用户名
    username_input.send_keys('306334678@qq.com')
    
    password_input=bro.find_element_by_id('TANGRAM__PSP_11__password')
    password_input.send_keys('sss')
    
    login_button=bro.find_element_by_id('TANGRAM__PSP_11__submit')
    
    time.sleep(5)
    login_button.click()
    
    time.sleep(10)
    
    
    print(bro.get_cookies())
    
    
    bro.close()

    3.4 selenium的其他使用

    import time
    from selenium import webdriver
    
    bro=webdriver.Chrome(executable_path='chromedriver.exe')
    # bro.get('http://www.baidu.com')
    
    # print(bro.page_source)
    
    # 选择器
    # 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             xpath选择器
    
    
    # input_1=bro.find_element_by_css_selector('#kw')
    # # 往输入框中写文字
    # input_1.send_keys('美女')
    #
    # search_btn=bro.find_element_by_css_selector('#su')
    # search_btn.click()
    
    
    
    # 获取某个标签的属性,位置,id,名字..
    
    # input_1=bro.find_element_by_css_selector('#kw')
    # print(input_1.id)
    # print(input_1.tag_name)
    # print(input_1.get_attribute('maxlength'))
    # print(input_1.location)
    # print(input_1.size)
    
    
    
    
    ## 等待元素被加载(显示等待,隐士等待)
    # bro.implicitly_wait(10)  # 隐士等待,等待所有,再下方再去找一个控件,如果控件没有加载出来,最多等待10s
    
    
    # 显示等待(基本不用),指定等待某个控件几秒
    # from selenium.webdriver.support.wait import WebDriverWait
    # from selenium.webdriver.support import expected_conditions as EC
    # from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
    # wait=WebDriverWait(bro,10)
    # wait.until(EC.presence_of_element_located((By.ID,'kw')))
    
    
    
    ## 控件其它操作
    # 点击操作
    # search_btn=bro.find_element_by_css_selector('#su')
    # search_btn.click()  # 点击操作
    
    # input_1=bro.find_element_by_css_selector('#kw')
    # # 往输入框中写文字
    # # 清空操作
    # input_1.send_keys('美女')
    # time.sleep(1)
    # input_1.clear()
    # input_1.send_keys('帅哥')
    
    
    
    
    ### 执行js
    # bro.get('https://www.pearvideo.com/video_1715923')
    # bro.execute_script('alert(urlMap.registerUrl)')
    
    # bro.execute_script('scroll(0,30000)')  # 滑倒屏幕底部,有的页面滑倒底部自动加载数据
    
    
    
    # 模拟浏览器前进后退
    
    #
    # bro.get('http://www.baidu.com')
    # bro.get('http://www.taobao.com')
    # bro.get('http://www.cnblogs.com')
    #
    # bro.back()
    #
    # time.sleep(1)
    # bro.forward()
    # time.sleep(1)
    
    # bro.get('http://www.cnblogs.com')
    #
    # time.sleep(30)
    
    
    ### cookie的处理
    # print(type(bro.get_cookies())) # 把所有cookie取出来
    # cookies=bro.get_cookies()
    # import json
    # with open('cookie.json','w') as f:
    #     json.dump(cookies,f)
    #
    # # 取到cookie之后,存到文件中
    # # 再打开一个页面,还是这个网站,把cookie之间写入
    #
    # time.sleep(1)
    # # 关闭浏览器
    # bro.close()
    
    
    
    
    ### 选项卡管理
    # 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()
    
    
    
    ## 异常捕获
    try:
        browser=webdriver.Chrome()
        browser.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
        browser.switch_to.frame('iframssseResult')
    
    except Exception as e:
        print(e)
    finally:
        browser.close()  # 关闭浏览器

    # 动作链
    # 使用selenium爬取京东商品信息

     
    from selenium import webdriver
    import json
    import time
    bro=webdriver.Chrome(executable_path='chromedriver.exe')
    bro.get('http://www.cnblogs.com')
    with open('cookie.json','r') as f:
        cookie=json.load(f)
    
    for i in cookie:
        bro.add_cookie(i)
    time.sleep(1)
    bro.refresh()
    time.sleep(1)
    bro.refresh()
    
    time.sleep(4)
    bro.close()
  • 相关阅读:
    java8学习笔记之lambda表达式
    spring注解value的用法
    mybites
    spring bean的初始化以及销毁
    java并发之线程间通信
    mybatis常见问题和错误
    hadoop安装问题记录
    linux 常用命令
    省选模拟98 题解
    省选模拟97 题解
  • 原文地址:https://www.cnblogs.com/ltyc/p/14308765.html
Copyright © 2011-2022 走看看