精华内容
下载资源
问答
  • selenium的options常用操作

    万次阅读 2021-01-26 17:55:51
    常用操作如下: 设置编码格式: # 设置默认编码为 utf-8,也就是中文...driver = webdriver.Chrome(chrome_options = options) 模拟移动设备 # 通过设置user-agent,用来模拟移动设备 # 比如模拟 android QQ浏览器 op

    常用操作如下:

    设置编码格式

    # 设置默认编码为 utf-8,也就是中文
    from selenium import webdriver
    options = webdriver.ChromeOptions()
    options.add_argument('lang=zh_CN.UTF-8')
    driver = webdriver.Chrome(chrome_options = options)
    
    

    模拟移动设备

    # 通过设置user-agent,用来模拟移动设备
    # 比如模拟 android QQ浏览器
    options.add_argument('user-agent="MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"')
    # 模拟iPhone 6
    options.add_argument('user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"')
    
    

    禁止图片加载

    • 不加载图片的情况下,可以提升爬取速度。
    # 禁止图片的加载
    from selenium import webdriver
    chrome_options = webdriver.ChromeOptions()
    prefs = {"profile.managed_default_content_settings.images": 2}
    chrome_options.add_experimental_option("prefs", prefs)
    # 启动浏览器,并设置好wait
    browser = webdriver.Chrome(chrome_options=chrome_options)
    browser.set_window_size(configure.windowHeight, configure.windowWidth)   # 根据桌面分辨率来定,主要是为了抓到验证码的截屏
    wait = WebDriverWait(browser, timeout = configure.timeoutMain)
    
    

    添加代理

    • 为selenium爬虫添加代理,这个地方尤其需要注意的是,在选择代理时,尽量选择静态IP,才能提升爬取的稳定性。因为如果选择selenium来做爬虫,说明网站的反爬能力比较高(要不然直接上scrapy了),对网页之间的连贯性,cookies,用户状态等有较高的监测。如果使用动态匿名IP,每个IP的存活时间是很短的(1~3分钟)。
    from selenium import webdriver
    # 静态IP:102.23.1.105:2005
    # 阿布云动态IP:http://D37EPSERV96VT4W2:CERU56DAEB345HU90@proxy.abuyun.com:9020
    PROXY = "proxy_host:proxy:port"
    options = webdriver.ChromeOptions()
    desired_capabilities = options.to_capabilities()
    desired_capabilities['proxy'] = {
        "httpProxy": PROXY,
        "ftpProxy": PROXY,
        "sslProxy": PROXY,
        "noProxy": None,
        "proxyType": "MANUAL",
        "class": "org.openqa.selenium.Proxy",
        "autodetect": False
    }
    driver = webdriver.Chrome(desired_capabilities = desired_capabilities)
    
    

    将插件路径填入代码中

    # 添加xpath helper应用
    from selenium import webdriver
    chrome_options = webdriver.ChromeOptions()
    # 设置好应用扩展
    extension_path = 'D:/extension/XPath-Helper_v2.0.2.crx'
    chrome_options.add_extension(extension_path)
    # 启动浏览器,并设置好wait
    browser = webdriver.Chrome(chrome_options=chrome_options)
    
    

    登录时关闭弹出的密码保存提示框

    from time import sleep 
    from selenium import webdriver 
    from selenium.webdriver.common.by import By
    options = webdriver.ChromeOptions() 
    prefs = {} 
    # 设置这两个参数就可以避免密码提示框的弹出
    prefs[“credentials_enable_service”] = False 
    prefs[“profile.password_manager_enabled”] = False 
    options.add_experimental_option(“prefs”, prefs) 
    browser = webdriver.Chrome(chrome_options=options) 
    browser.get('https://www.baidu.com/')
    
    

    无头浏览器和规避检测

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    options = webdriver.ChromeOptions()
    options.add_experimental_option('excludeSwitches', ['enable-automation'])       # 规避检测
    prefs = {"profile.managed_default_content_settings.images": 2}              # 不显示图片提高代码速度
    options.add_experimental_option("prefs", prefs)
    options.add_argument("--window-size=1920,1080")  # 屏幕大小
    browser = webdriver.Chrome(options=options)
    

    后记

    大家如果觉得小编的代码有用,可以多多关注小编,
    同时小编的公众号也开通了,大家可以关注下,后续进行粉丝回馈,大家一起学习python叭
    在这里插入图片描述
    打赏小编点这里哦
    在这里插入图片描述

    展开全文
  • options请求

    千次阅读 2018-12-18 17:27:37
    在当前项目中,前端通过POST方式访问后端的REST接口时,发现两条请求记录,一条请求的Request Method为Options,另一条请求的Reuest Method为Post。想要解决这个疑惑还得从以下3个概念说起。 Http Options Method ...

    <1>

    一个Option请求引发的深度解析

    在当前项目中,前端通过POST方式访问后端的REST接口时,发现两条请求记录,一条请求的Request Method为Options,另一条请求的Reuest Method为Post。想要解决这个疑惑还得从以下3个概念说起。

    Http Options Method

    RFC2616标准(现行的HTTP/1.1)中如下描述:

    简而言之,OPTIONS请求方法的主要用途有两个:

    1、获取服务器支持的HTTP请求方法;

    2、用来检查服务器的性能。

     

    CORS(跨域资源共享)

    CORS是一种网络浏览器的技术规范,它为Web服务器定义了一种方式,允许网页从不同的域访问其资源。而这种访问是被同源策略所禁止的。CORS系统定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求。 

    使用CORS的方式非常简单,但是需要同时对前端和服务器端做相应处理。

    1、  前端

    客户端使用XmlHttpRequest发起Ajax请求,当前绝大部分浏览器已经支持CORS方式,且主流浏览器均提供了对跨域资源共享的支持。

    2、  服务器端

    如果服务器端未做任何配置,则前端发起Ajax请求后,会得到CORS Access Deny,即跨域访问被拒绝。

    对于C#做如下配置可允许资源的跨域访问: 

    <system.webServer>
    ...
    <httpProtocol>
    <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type" />
    <add name="Access-Control-Allow-Methods" value="PUT,GET,POST,DELETE,OPTIONS"/>
    </customHeaders>
    </httpProtocol>
    </system.webServer>

    对于nodejs做如下配置可允许资源的跨域访问: 

    //设置CORS跨域访问
    app.all('*', function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With, accept, origin, content-type");
    res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By", ' 3.2.1')
    res.header("Content-Type", "application/json;charset=utf-8");
    next();
    });

    Access-Control-Allow-Origin:*表示允许任何域发起请求,如果只允许特定的域访问,则设置Access-Control-Allow-Origin:xxx为具体域名即可。

     

    Preflighted Requests(预检请求)

    Preflighted Requests是CORS中一种透明服务器验证机制。预检请求首先需要向另外一个域名的资源发送一个 HTTP OPTIONS 请求头,其目的就是为了判断实际发送的请求是否是安全的。

    下面的2种情况需要进行预检:

    1、  简单请求,比如使用Content-Type 为 application/xml 或 text/xml 的 POST 请求;

    2、中设置自定义头,比如 X-JSON、X-MENGXIANHUI 等。

     

    了解完这3个概念,其实答案已经了然了。

     

    参考:

    http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

    http://blog.csdn.net/hfahe/article/details/7730944

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

    <2>

    HTTP请求方法并不是只有GET和POST,只是最常用的。据RFC2616标准(现行的HTTP/1.1)得知,通常有以下8种方法:OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE和CONNECT。

    HTTP请求方法并不是只有GET和POST,只是最常用的。据RFC2616标准(现行的HTTP/1.1)得知,通常有以下8种方法:OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE和CONNECT。

     

    官方定义



    OPTIONS方法是用于请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。


    该请求方法的响应不能缓存。


    如果这个OPTIONS请求包含一个正文(有Content-Length或Transfer-Encoding存在),则必须有Content-Type来指定媒体类型。虽然规范里没有定义这种正文的用法,但是HTTP将来的扩展可能会用它来查询服务器上更详细的信息。不支持该扩展的服务器可以忽略该请求正文。


    如果该URI是一个星号(“*”),OPTIONS请求将试图应用于服务器,而不是某个指定资源。由于服务器的通信选项通常依赖于资源,所以此“*”请求只能作为“ping”或者“no-op”方法;或者用来测试服务器的性能。例如,用来测试HTTP/1.1代理。


    如果该URI不是星号,则只能用来获取该资源通信中可用的选项。


    得到的200响应应该包含一个头域,指明服务器实现的和适用于该资源的可选特征(如:Allow),可能还包括该规范尚未定义的扩展。如果有响应正文,则应包含关于通信选项的信息。本规范没有定义该正文格式,但可能在HTTO将来的扩展中定义。可以利用内容协商来选择合适的响应格式。如果没有响应正文,响应必须包含Content-Length,并且值为“0”。


    请求头的Max-Forwards用来请求特定代理。当代理收到一个允许URI转发的OPTIONS请求,则检查Max-Forwards。如果Max-Forwards值为0,则不能转发该消息;相反,代理会将自己的通信选项去响应。如果Max-Forwards是正整数,代理转发请求的时候会将该值减1。如果请求中没有Max-Forwards,转发的请求也不会有。

     

     

     

    简而言之



    OPTIONS请求方法的主要用途有两个:


    1、获取服务器支持的HTTP请求方法;也是黑客经常使用的方法。


    2、用来检查服务器的性能。例如:AJAX进行跨域请求时的预检,需要向另外一个域名的资源发送一个HTTP OPTIONS请求头,用以判断实际发送的请求是否安全。
     

    The DELETE Method

    HTTP提供了一个与PUT方法对应的DELETE方法。一个DELETE请求将需要从Web服务器删除的内容指定为请求行中的资源部分。
    DELETE方法唯一有趣的地方在于当你接收了一个标识为200 OK的响应的时候,那并不意味着指定的资源已经被删除了。那仅仅说明服务器接收到了删除资源的命令。这一例外允许了出于安全考虑的人为的干预

    转自:http://blog.csdn.net/leikezhu1981/article/details/7402272

    <3>

    出于安全考虑,并不是所有域名访问后端服务都可以。其实在正式跨域之前,浏览器会根据需要发起一次预检(也就是option请求),用来让服务端返回允许的方法(如get、post),被跨域访问的Origin(来源或者域),还有是否需要Credentials(认证信息)等。那么浏览器在什么情况下能预检呢?

    二、两种请求方式

        浏览器将CORS请求分为两类:简单请求(simple request)和非简单请求(not-simple-request),简单请求浏览器不会预检,而非简单请求会预检。这两种方式怎么区分?

    同时满足下列三大条件,就属于简单请求,否则属于非简单请求

    1.请求方式只能是:GET、POST、HEAD

    2.HTTP请求头限制这几种字段:Accept、Accept-Language、Content-Language、Content-Type、Last-Event-ID

    3.Content-type只能取:application/x-www-form-urlencoded、multipart/form-data、text/plain

    对于简单请求,浏览器直接请求,会在请求头信息中,增加一个origin字段,来说明本次请求来自哪个源(协议+域名+端口)。服务器根据这个值,来决定是否同意该请求,服务器返回的响应会多几个头信息字段,如图所示:上面的头信息中,三个与CORS请求相关,都是以Access-Control-开头。

    1.Access-Control-Allow-Origin:该字段是必须的,* 表示接受任意域名的请求,还可以指定域名

    2.Access-Control-Allow-Credentials:该字段可选,是个布尔值,表示是否可以携带cookie,(注意:如果Access-Control-Allow-Origin字段设置*,此字段设为true无效)

    3.Access-Control-Allow-Headers:该字段可选,里面可以获取Cache-Control、Content-Type、Expires等,如果想要拿到其他字段,就可以在这个字段中指定。比如图中指定的GUAZISSO

    非简单请求是对那种对服务器有特殊要求的请求,比如请求方式是PUT或者DELETE,或者Content-Type字段类型是application/json。都会在正式通信之前,增加一次HTTP请求,称之为预检。浏览器会先询问服务器,当前网页所在域名是否在服务器的许可名单之中,服务器允许之后,浏览器会发出正式的XMLHttpRequest请求,否则会报错。(备注:之前碰到预检请求后端没有通过,就不会发正式请求,然后找了好久原因,原来后端给忘了设置...)Java后端实现拦截器,排除Options

    JAVA代码片段

    就Content-Type为application/json为例:对比两张图片,一次预检请求,一 次正式请求:

    预检请求

    正式请求

    很明显,请求头中预检请求不会携带cookie,正式请求会携带cookie和参数。跟普通请求一样,响应头也会增加同样字段。

    一旦服务器通过了“预检”请求,以后每次浏览器正常的CORS请求,就都跟简单请求一样。



     

    展开全文
  • 解决:use options instead of chrome_options

    千次阅读 2020-04-06 08:15:36
    解决:use options instead of chrome_options使用 selenium可以调用 谷歌、火狐等浏览器进行爬虫的爬取,比如这段代码出现use options instead of chrome_options:解决方法: 使用 selenium可以调用 谷歌、火狐等...

    使用 selenium可以调用 谷歌、火狐等浏览器进行爬虫的爬取,比如这段代码出现use options instead of chrome_options:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    base_url = "http://www.baidu.com/"
    driver = webdriver.Chrome(chrome_options = chrome_options)
    driver.get(base_url + "/")
    driver.find_element_by_id("kw").send_keys("Python程序设计")
    driver.find_element_by_id("su").click()
    driver.save_screenshot('screen.png')
    driver.close()
    
    DeprecationWarning: use options instead of chrome_options
    

    解决方法:

    chrome_options参数是已经弃用的,被新的参数options替换了
    将 chrome_options 替换为 options 即可。
    修改第七行:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    base_url = "http://www.baidu.com/"
    driver = webdriver.Chrome(options = chrome_options)
    driver.get(base_url + "/")
    driver.find_element_by_id("kw").send_keys("Python程序设计")
    driver.find_element_by_id("su").click()
    driver.save_screenshot('screen.png')
    driver.close()
    

    运行结果:
    运行结果

    展开全文
  • 做上传文件功能时,在请求上传文件接口之前,会发送一个options的请求。 原因 ajax 请求遵循同源策略(协议、域名、端口必须一致),若突破该限制,会产生跨域行为,设置Access-Control-Allow-Origin: *,可允许...

    背景

    做上传文件功能时,在请求上传文件接口之前,会发送一个options的请求。

    原因

    ajax 请求遵循同源策略(协议、域名、端口必须一致),若突破该限制,会产生跨域行为,设置Access-Control-Allow-Origin: *,可允许客户端跨域访问。
    除上述情况外,还有一种请求叫做Preflighted Request(带预检的跨域请求)。

    Preflighted Request在发送真正的请求前,会先发送一个方法为OPTIONS的预请求(Preflighted Request),用于试探服务端是否能接受真正的请求。如果options获得的回应时拒绝性质的,如404、403、500等状态,就会停止post、get请求的发出。

    请求变成Preflighted Request的情况如下:文档地址:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#The_HTTP_request_headers)
    1、请求方法不是GET/HEAD/POST
    2、POST请求的Content-Type并非application/x-www-form-urlencoded, multipart/form-data, 或text/plain
    3、请求设置了自定义的header字段

    例如:如果POST请求要传输的数据为 XML文档, Content-Type为application/xml或text/xml, 则发送这个请求前会发送一个预请求,或者自定义的header字段也是一样的道理。

    所以说, 在项目中ajax对后台API的调用, OPTIONS请求是没办法去掉的, 除非后台接口不再需要在请求header中设置openId
    但是由于该项目中用户信息是采用的JWT的方式,所以只好作罢。

    但是由于该项目在后台中自定义了请求频率限制的拦截器,例如限制同一个客户端一秒内对某一个接口只能访问1次。如果超过限制,则第二次会返回状态码500,不予处理。如果每次请求前都带着一次OPTIONS请求,则该拦截器无法正常实现功能,反正会导致大批接口调用失败的情况。

    鉴于上述分析,既然前端发起请求时OPTIONS请求没有办法去除,那么是否可以考虑从后台拦截器进行改造。

    如果拦截到的请求不是项目中常规的GET或者POST请求,则该拦截器直接放行。至此,问题完美解决。希望可以帮到有类似问题的小伙伴~

    展开全文
  • ChromeOptions options = new ChromeOptions(); options.BinaryLocation = sysPath + "/Chrome/Chrome.exe"; #设置浏览器程序位置 options.AddArgument("url=data:,");#设置启动浏览器空白页 options.Add
  • 我们只需要chrome_options改成options即可,该问题应该在最近的版本更改的目前我这边使用的是selenium==3.9.0,有兴趣的可以去看下官方文档,那个版本开始做的此项的修改。 ...
  • 使用 selenium可以调用 谷歌、火狐等浏览器进行爬虫的爬取,但当我运行: ...from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument('--headless') dri...
  • javascript操作Select标记中options集合 分类:JAVASCRIPT先来看看options集合的这几个方法: options.add(option)方法向集合里添加一项option对象; options.remove(index)方法移除options集合中的指定项; ...
  • OPTIONS方法禁用

    万次阅读 2019-03-13 11:18:27
    在给系统做安全检测的过程中,发现了一个低危安全性问题,检测到目标服务器启用了OPTIONS方法。 OPTIONS方法是用于请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户 ...
  • IPv4 Options

    千次阅读 2014-06-30 15:00:36
    IPv4 allows up to 40 bytes of options to follow the fixed 20-byte header. Although 10 different options are defined, the most commonly used is the source route option. Access to these options is thro
  • options请求方式

    千次阅读 2019-08-16 16:08:40
    OPTIONS请求即预检请求,可用于检测服务器...当发起跨域请求时,由于安全原因,触发一定条件时浏览器会在正式请求之前自动先发起OPTIONS请求,即CORS预检请求,服务器若接受该跨域请求,浏览器才继续发起正式请求。 ...
  • Ceres的Options详解

    千次阅读 2018-12-08 15:38:49
    目录1、Ceres简介2、常用通用参数 1、Ceres简介 Ceres是一个非常优秀的非线性优化库(谷歌出品)。能完成很复杂的优化功能,...检查options是否合法,不合法的话返回false,并将错误信息存到error里面。 i...
  • 今日npm run serve时提示ERROR ValidationError: webpack Dev Server Invalid Options options should NOT have additional properties 无效参数配置? 如图: 看提示好像是说 webpack 的dev server配置有点问题 ,...
  • odoo有关options

    千次阅读 2018-12-20 08:48:56
    Options : Other possible options you can use with this widget. no_quick_create - It will remove Create and edit… option. no_create_edit - It will remove Create “entered text”...
  • 关于options请求的一点理解 最近最项目改造,对所有的ajax请求统一做了一点处理,发现原来很正经的ajax请求突然不正常了,每个ajax之前都多了一个相应的method为options的请求。虽然之前知道ajax的请求中method有这...
  • http预请求options

    万次阅读 多人点赞 2018-08-10 14:49:44
    在有很多情况下,当我们在js里面调用一次ajax请求时,在浏览器那边却会查询到两次请求,第一次的Request Method参数是OPTIONS,还有一次就是我们真正的请求,比如get或是post请求方式 查阅相关的资料之后发现,这是浏览器...
  • 前端OPTIONS请求

    千次阅读 2018-06-13 10:36:34
    OPTIONS请求OPTIONS请求方法的主要用途有两个:1、获取服务器支持的HTTP请求方法;也是黑客经常使用的方法。2、用来检查服务器的性能。例如:AJAX进行跨域请求时的预检,需要向另外一个域名的资源发送一个...
  • 关于options请求

    千次阅读 2018-10-31 15:51:00
    有时我们在浏览器中发现发送的ajax请求自动请求两次,第一次是options请求,第二次才是你自己发送的get或post请求。 有时我们也会发现,自己用的get或者post方法请求的,浏览器只有一个options请求。自己的get或post...
  • AJAX请求 OPTIONS

    千次阅读 2018-04-19 10:49:57
    昨天做静态页面调用接口(java提供)的时候,ajax post 请求无论如何都加载不到数据,不是405就是415,一开始只看了Internal里返回的数据,请求类型莫名变为options,后来看了console里的内容才知道是跨域导致的。...
  • IDEA vmoptions配置

    万次阅读 2018-11-07 11:24:22
    打开 IDEA 安装目录,看到有一个 bin 目录,其中有两个 vmoptions 文件,需针对不同的JDK进行配置: 32 位:idea.exe.vmoptions 64 位:idea64.exe.vmoptions   [plain] view plain copy...
  • 对‘boost::program_options::options_description::add_options()’未定义的引用 编译caffe、opencv、cpp文件遇到的问题 错误信息 // An highlighted block .build_release/examples/ln/macc3d_pyramid_test.o:在...
  • tf.RunOptions

    2019-08-31 21:04:35
    __init__ __init__(**kwargs) Child Classes class Experimental Properties ...DebugOptions debug_options experimental Experimental experimental inter_op_thread_pool int32 inter_op_...
  • idea VM options参数优化

    万次阅读 2019-08-07 23:18:10
    idea 如果不优化相关的配置会很卡,而且热加载也会很慢,每一次保存都在那儿等很久,于是整理很多的vm options 优化,相对默认的空空如也的文本框,舒服多了,顺畅多了,具体如下: -Xms2048m -Xmx2048m -XX:...
  • ionic 项目执行命令 ionic cordova platform android 时,出现错误ValidationError: Invalid options object. Sass Loader has been initialized using an options object that does not match the API schema ...
  • 在IDEA的“Help | Edit Custom VM Options”菜单中修改了“.vmoptions”配置,(改错了文件路径),重启多次,软件一直打不开。即便卸载重装软件,问题依然复现。 一、".vmoptions" 官方描述 Configuring JVM ...
  • Idea2019之修改Edit Custom VM Options出错

    万次阅读 2020-01-06 16:09:07
    在 填错了 Help -》Edit Custom VM Options 中的参数导致无法打开 idea.exe。 参考网址:https://intellij-support.jetbrains.com/hc/en-us/articles/206544519 (英文版) 翻译如下: Idea安装时会在你指定的...
  • 在进行 react 项目开发的时候,出现了这个错误,ValidationError: Invalid options object. Less Loader has been initialized using an options object that does not match the API schema. 如下所示:Module ...
  • 在微信小程序中页面跳转可以通过options来获取传过来的值。 跳转页面函数: // 点击当前列表获取详情跳转 detailHandler(event){ var detailId = event.currentTarget.dataset.detailid; wx.navigateTo({ url:...
  • var options = options || {};

    千次阅读 2013-11-04 09:47:21
    var options = options || {};这个语句是一个赋值或者初始化语句。 该语句在options已经被初始化过后options的值不变,即执行var options = options这一部分。 当options未被初始化,即typeof options = 'undefined'...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 339,760
精华内容 135,904
关键字:

options