zoukankan      html  css  js  c++  java
  • selenium的使用以及用代码去操作谷歌浏览器

    selenium

    """
    ########
    # 3 selenium的使用
    #######
    
    """
    #1  selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题
     -可以操作浏览器(火狐,谷歌(建议你用谷歌),ie),模拟人的行为(人可以干啥,代码控制就可以干啥)
     # pip3 install selenium
    """
    # 1、selenium的简单使用
    # from selenium import webdriver
    # import time
    # # 得到 一个谷歌浏览器对象
    # # 代码不能直接操作浏览器,需要有一个浏览器驱动(配套的)
    # # 下载谷歌浏览器驱动:http://npm.taobao.org/mirrors/chromedriver/
    # # 谷歌浏览器驱动要跟谷歌版本对应
    # # http://chromedriver.storage.googleapis.com/79.0.3945.36/   79.0.3945.130(正式版本)
    # # 指定一下驱动的位置(相对路径/绝对路径)
    # bro=webdriver.Chrome(executable_path='./chromedriver.exe')
    # bro.get("https://www.baidu.com")
    #
    # # 页面内容
    # #  相当于它ret.text,可以使用bs4解析数据,或者用selenium自带的解析器解析
    # print(bro.page_source)
    # time.sleep(10)
    # bro.close()
    
    
    # 2、常用用法(在输入框中输入美女,搜索)
    
    # from selenium import webdriver
    # import time
    # bro=webdriver.Chrome(executable_path='./chromedriver.exe')
    # bro.get("https://www.baidu.com")
    
    # 在输入框中输入美女(自带的解释器,查找输入框控件)
    # 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='xx' 根据name属性找
    # 7、find_element_by_css_selector    # css选择器找
    # # 8、find_element_by_xpath           #xpath选择器找
    
    
    
    # # input_search = bro.find_element_by_xpath('//*[@id="kw"]')
    # input_search = bro.find_element_by_css_selector('#kw')
    #
    # # 写入文字
    # input_search.send_keys('美女')
    #
    # # 查找搜索按钮
    # enter = bro.find_element_by_id('su')
    #
    # # 点击按钮
    # enter.click()
    #
    # time.sleep(3)
    #
    # bro.close()
    
    
    # 3、小案列
    
    # from selenium import webdriver
    # import time
    # bro=webdriver.Chrome(executable_path='./chromedriver.exe')
    # bro.get("https://www.baidu.com")
    #
    # # 隐士等待(比如我们让他最多等待10s)
    # # 只有控件没有加载出来,才会等,控件一旦加载出来,就直接取到
    # bro.implicitly_wait(10)
    #
    # # 点击百度的登录
    # submit_button = bro.find_element_by_link_text('登录')
    # submit_button.click()
    #
    # # 用户名登录
    # user_button = bro.find_element_by_id('TANGRAM__PSP_10__footerULoginBtn')
    # user_button.click()
    #
    # # 输入用户名框
    # user_input = bro.find_element_by_id('TANGRAM__PSP_10__userName')
    # user_input.send_keys('15084785194')
    #
    # # 输入密码框
    # pwd_input = bro.find_element_by_id('TANGRAM__PSP_10__password')
    # pwd_input.send_keys('zhanyafeng666')
    #
    # # 登录
    # submit_input = bro.find_element_by_id('TANGRAM__PSP_10__submit')
    # submit_input.click()
    #
    #
    # time.sleep(3)
    # bro.close()
    
    
    
    # 4 获取cookie
    # 登陆之后,拿到cookie:就可以自己搭建cookie池(requests模块发请求,携带者cookie)
    # import time
    # from selenium import webdriver
    # bro=webdriver.Chrome(executable_path='./chromedriver')
    # bro.get("https://www.baidu.com")
    # print(bro.get_cookies())
    # bro.close()
    #
    # #搭建cookie池和代理池的作用是什么?封ip ,封账号(弄一堆小号,一堆cookie)
    
    
    
    # 5 无界面浏览器(驱动谷歌,驱动其他浏览器)
    # from selenium import webdriver
    # 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',options=chrome_options)
    # bro.get("https://www.baidu.com")
    # print(bro.get_cookies())
    # bro.close()
    
    
    # 6 获取标签属性
    # (重点:获取属性)
    # print(tag.get_attribute('src'))
    # print(tag.get_attribute('href'))
    # # (重点:获取文本)
    # print(tag.text)
    #
    # #获取标签ID,位置,名称,大小(了解)
    # print(tag.id)
    # print(tag.location)
    # print(tag.tag_name)
    # print(tag.size)
    
    
    # 7 显示等待和隐士等待
    # 隐士等待(最多等待10s)
    # 只有控件没有加载出来,才会等,控件一旦加载出来,直接就取到
    # bro.implicitly_wait(10)
    # 显示等待(每个控件,都要写等待),不要使用
    
    # 8 元素交互操作 点击click,清空clear,输入文字send_keys
    
    
    #9 执行js
    # from selenium import webdriver
    # import time
    # bro=webdriver.Chrome(executable_path='./chromedriver')
    #
    # bro.get("https://www.cnblogs.com")
    # # 执行js代码
    # # bro.execute_script('alert(1)')
    # # window.scrollTo(0,document.body.scrollHeight)
    #
    # # 屏幕滑动到底部
    # bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
    # time.sleep(5)
    # bro.close()
    
    
    
    # 10 模拟浏览器前进后推
    # import time
    # from selenium import webdriver
    # bro=webdriver.Chrome(executable_path='./chromedriver')
    #
    # bro.get("https://www.cnblogs.com")
    # time.sleep(1)
    # bro.get("https://www.baidu.com")
    # time.sleep(1)
    # bro.get("https://www.jd.com")
    #
    # #退到上一个
    # bro.back()
    # time.sleep(1)
    # # 前进一下
    # bro.forward()
    #
    # time.sleep(5)
    # bro.close()
    
    
    # 10 选项卡管理
    # import time
    # from selenium import webdriver
    #
    # browser=webdriver.Chrome(executable_path='./chromedriver')
    # 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()
    
    # 11 异常处理
    from selenium import webdriver
    from selenium.common.exceptions import TimeoutException,NoSuchElementException,NoSuchFrameException
    
    try:
        browser=webdriver.Chrome(executable_path='./chromedriver')
        browser.get('http://www.baidu.com')
        browser.find_element_by_id("xxx")
    
    except Exception as e:
        print(e)
    finally:
        browser.close()
    """
    
  • 相关阅读:
    【leetcode】7. 反转整数
    【leetcode】496. 下一个更大元素 I
    【leetcode】389. 找不同
    Linux驱动模型解析bus之platform bus
    shell 和进程
    递归调用在循环体内: 把循环展开, 这种情况是先循环再递归
    javascript函数柯里化以及柯里化带来的好处
    Maven测试篇
    关于ECharts Java类库的一个jquery插件
    javascript原型链继承
  • 原文地址:https://www.cnblogs.com/yafeng666/p/12669394.html
Copyright © 2011-2022 走看看