zoukankan      html  css  js  c++  java
  • Chrome Headless模式(二)——Python+selenium+headerless

    selenium调用headerless

    1. 基础环境:

        我使用的环境:

    python:3.5.4

    python的selenium库: 3.141.0

    chrome浏览器:  71.0.3578.98

    chromedriver下载地址: http://chromedriver.storage.googleapis.com/index.html

    注意:一定要确保chrome浏览器和chromedriver版本对应,如果不对应,可能会出现各种奇怪的报错

    2. selenium使用headless模式

    如何通过selenium调用headless模式呢?  下面是python的代码

    from selenium import webdriver
    
    chrome_options = webdriver.ChromeOptions()
    #无头模式
    chrome_options.add_argument('--headless')
    #实例化Chrome driver
    driver=webdriver.Chrome(chrome_options=chrome_options)
    #打开百度地图
    driver.get("https://map.baidu.com/")
    #截屏,文件保存为baidu-map.png
    driver.save_screenshot("baidu-map.png")

    3. 浏览器设置窗口大小

    chrome_options.add_argument('--window-size=1280,800')

    4. 打开新的标签页

          js代码可window.open(url)可在新窗口打开一个网页, dirver可执行js代码,具体代码如下:

    js="window.open('http://www.baidu.com/')"
    driver.execute_script(js)

    5. 切换窗口

    比如我们打开的第一个页面是[百度地图], 第2个窗口打开的页面是百度.如果我们想在第2个页面的输入框输入selenium,代码如下

    from selenium import webdriver
    
    chrome_options = webdriver.ChromeOptions()
    #无头模式
    chrome_options.add_argument('--headless')
    #设置窗口大小
    chrome_options.add_argument('--window-size=1280,800')
    #实例化Chrome driver
    driver=webdriver.Chrome(chrome_options=chrome_options)
    #打开百度地图页面
    driver.get("https://map.baidu.com/")
    
    js="window.open('http://www.baidu.com')"
    driver.execute_script(js)
    driver.find_element_by_id("kw").send_keys("selenium")
    driver.save_screenshot("baidu-map5.png")
    driver.quit()

          但是很奇怪, 代码报错了,no such element: Unable to locate element: {"method":"id","selector":"kw"} 找不到这个元素.但是我们看百度的页面命名可以找到这个元素啊. 我们在这步操作之前截一张图就可以看出来,页面扔在第一个页面,即百度地图的页面, 这时候我们需要切换一些窗口.

    注意: 以前的方法,diver.switch_to_window() 已经被driver.switch_to.window替代

    search_windows=driver.current_window_handle
    all_handles=driver.window_handles
    for handle in all_handles:
        if handle !=search_windows:
            driver.switch_to.window(handle)

    6. 关闭窗口和关闭浏览器

    • driver.quit() 关闭浏览器
    • driver.close() 关闭标签页.

     这2个的使用场景是不同的:

    1) 在我们的case执行完对浏览器的操作后,一定要加上driver.quit() ,不然会导致内存爆满;

    2) 如果我们只想关闭一个窗口, 则用driver.close() 

    7. 添加代理

    chrome_options.add_argument("--proxy-server=http://" + ip:port)

    8. 修改User-Agent

    # 修改User-Agent
    chrome_options.add_argument('user-agent= '你想修改成的User-Agent')

    9. 禁用图片

    chrome_options.add_argument('blink-settings=imagesEnabled=false')
  • 相关阅读:
    WinHex简介
    CTF中图片隐藏文件分离方法
    隐写术的相关解法
    JPEG文件格式
    PNG文件结构
    网络安全实验室—基础关
    实验吧—密码学(1)
    YIT-CTF—隐写术
    YIT-CTF—Web
    YIT-CTF—社工类
  • 原文地址:https://www.cnblogs.com/yimiaoyikan/p/10234910.html
Copyright © 2011-2022 走看看