1 淘宝的页面没有jquery需要在加载之后用cef注入jquery
OnLoadEnd后
const CefString js = “var v = document.createElement(‘script’);v.src=‘https://libs.baidu.com/jquery/2.0.0/jquery.min.js’;document.body.appendChild(v);”;
frame->ExecuteJavaScript(js, frame->GetURL(), 0);
const CefString js2 = u8"var v = document.createElement(‘script’); v.charset=‘utf-8’;v.innerHTML = "function pagechangeto(npagecount) { var htmlarrt = ‘[aria-label=第’+npagecount+‘页]’;$(htmlarrt)[0].click(); }; “; document.body.appendChild(v);”;
frame->ExecuteJavaScript(js2.ToString(), frame->GetURL(), 0);
2 cef抓取request的reponse的content 我使用的是GetResourceResponseFilter的接口但是这个接口会相应很多次 文档上说的是
// Called to filter a chunk of data. Expected usage is as follows:
调用以筛选数据块。预期用途如下:
//
// A. Read input data from |data_in| and set |data_in_read| to the number of
// bytes that were read up to a maximum of |data_in_size|. |data_in| will
// be NULL if |data_in_size| is zero.
A、 从| data|in|读取输入数据,并将| data_in_read|设置为读取的最大字节数| data_in_size|。如果|data_in_size|为零,|data_in|的数据为空。
// B. Write filtered output data to |data_out| and set |data_out_written| to
// the number of bytes that were written up to a maximum of
// |data_out_size|. If no output data was written then all data must be
// read from |data_in| (user must set |data_in_read| = |data_in_size|).
B、 将过滤后的输出数据写入| data_out |并将| data_out_written |设置为写入的最大字节数为|data_out_size|。如果没有输出数据被写入,则所有数据必须从| data_in|读取(用户必须设置| data_in_read |=| data_in_size|)。
// C. Return RESPONSE_FILTER_DONE if all output data was written or
// RESPONSE_FILTER_NEED_MORE_DATA if output data is still pending.
C、如果所有输出数据都已写入,则返回RESPONSE_FILTER_DONE;如果输出数据仍处于挂起状态,则RESPONSE_FILTER_NEED_MORE_data。
//
// This method will be called repeatedly until the input buffer has been
// fully read (user sets |data_in_read| = |data_in_size|) and there is no
// more input data to filter (the resource response is complete). This method
// may then be called an additional time with an empty input buffer if the
// user filled the output buffer (set |data_out_written| = |data_out_size|)
// and returned RESPONSE_FILTER_NEED_MORE_DATA to indicate that output data is
// still pending.
此方法将被反复调用,直到输入缓冲区被完全读取(用户将| data_in_read |=| data_in_size |)并且没有更多的输入数据要过滤(资源响应完成)。此方法额外使用空的缓冲区调用一次如果用户填充了输出缓冲区(set | data_out_written |=| data_out_size |)并且返回的RESPONSE_FILTER_NEED_MORE_data以指示输出数据仍处于挂起状态
//
// Calls to this method will stop when one of the following conditions is met:
满足以下条件之一时,对此方法的调用将停止:
//
// A. There is no more input data to filter (the resource response is
// complete) and the user sets |data_out_written| = 0 or returns
// RESPONSE_FILTER_DONE to indicate that all data has been written, or;
A、没有更多的输入数据要过滤(资源响应完成),用户设置| data_out_written |=0或返回response_filter_DONE以指示所有数据已写入,或;
// B. The user returns RESPONSE_FILTER_ERROR to indicate an error.
B、 用户返回响应RESPONSE_FILTER_ERROR错误以指示错误。
//
但是经过测试发现当data_in_size = 65536的时候下一帧的数据data_in_size = 0 data_in = null 不知道为啥,这样就无法判断当前的reponse是否结束,但是淘宝这里返回的是json我就只能通过判断json是否合法然后继续做操作了。
最近在做个淘宝搜索遇到的坑吧
最新推荐文章于 2020-12-22 09:10:22 发布