@@ -30,6 +30,7 @@ WEBDRIVER = dict(
3030 executable_path = None , # 浏览器路径,默认为默认路径
3131 render_time = 0 , # 渲染时长,即打开网页等待指定时间后再获取源码
3232 custom_argument = [" --ignore-certificate-errors" ], # 自定义浏览器渲染参数
33+ xhr_url_regexes = None , # 拦截xhr接口,支持正则,数组类型
3334)
3435```
3536
@@ -138,14 +139,121 @@ class TestRender(feapder.AirSpider):
138139
139140 # response也是可以正常使用的
140141 # response.xpath("//title")
141- # response.text
142+
143+ # 若有滚动,可通过如下方式更新response,使其加载滚动后的内容
144+ # response.text = browser.page_source
142145
143146
144147if __name__ == " __main__" :
145148 TestRender().start()
146149
147150```
148151
152+ ## 拦截xhr数据
153+
154+ ### 设置拦截规则
155+
156+ ``` python
157+ WEBDRIVER = dict (
158+ ...
159+ xhr_url_regexes = [
160+ " 接口1正则" ,
161+ " 接口2正则" ,
162+ ]
163+ )
164+ ```
165+
166+ ### 获取数据
167+
168+ ``` python
169+ browser: WebDriver = response.browser
170+ text = browser.xhr_text(" 接口1正则" )
171+ ```
172+
173+ ### 获取json格式数据
174+
175+ ``` python
176+ browser: WebDriver = response.browser
177+ data = browser.xhr_json(" 接口1正则" )
178+ ```
179+
180+ ### 获取response
181+
182+ ``` python
183+ browser: WebDriver = response.browser
184+ xhr_response = browser.xhr_response(" 接口1正则" )
185+ print (" 请求接口" , xhr_response.request.url)
186+ print (" 请求头" , xhr_response.request.headers)
187+ print (" 请求体" , xhr_response.request.data)
188+ print (" 返回头" , xhr_response.headers)
189+ print (" 返回地址" , xhr_response.url)
190+ print (" 返回内容" , xhr_response.content)
191+ ```
192+
193+
194+ ### 示例:
195+
196+ 需求:
197+ ![ ] ( http://markdown-media.oss-cn-beijing.aliyuncs.com/2021/12/30/16408610725756.jpg )
198+
199+ 代码:
200+ ``` python
201+ import time
202+
203+ import feapder
204+ from feapder.utils.webdriver import WebDriver
205+
206+
207+ class TestRender (feapder .AirSpider ):
208+ __custom_setting__ = dict (
209+ WEBDRIVER = dict (
210+ pool_size = 1 , # 浏览器的数量
211+ load_images = True , # 是否加载图片
212+ user_agent = None , # 字符串 或 无参函数,返回值为user_agent
213+ proxy = None , # xxx.xxx.xxx.xxx:xxxx 或 无参函数,返回值为代理地址
214+ headless = False , # 是否为无头浏览器
215+ driver_type = " CHROME" , # CHROME、PHANTOMJS、FIREFOX
216+ timeout = 30 , # 请求超时时间
217+ window_size = (1024 , 800 ), # 窗口大小
218+ executable_path = None , # 浏览器路径,默认为默认路径
219+ render_time = 0 , # 渲染时长,即打开网页等待指定时间后再获取源码
220+ custom_argument = [" --ignore-certificate-errors" ], # 自定义浏览器渲染参数
221+ xhr_url_regexes = [
222+ " /ad" ,
223+ ], # 拦截 http://www.spidertools.cn/spidertools/ad 接口
224+ )
225+ )
226+
227+ def start_requests (self ):
228+ yield feapder.Request(" http://www.spidertools.cn" , render = True )
229+
230+ def parse (self , request , response ):
231+ browser: WebDriver = response.browser
232+ time.sleep(3 )
233+
234+ # 获取接口数据 文本类型
235+ ad = browser.xhr_text(" /ad" )
236+ print (ad)
237+
238+ # 获取接口数据 转成json,本例因为返回的接口是文本,所以不转了
239+ # browser.xhr_json("/ad")
240+
241+ xhr_response = browser.xhr_response(" /ad" )
242+ print (" 请求接口" , xhr_response.request.url)
243+ # 请求头目前获取的不完整
244+ print (" 请求头" , xhr_response.request.headers)
245+ print (" 请求体" , xhr_response.request.data)
246+ print (" 返回头" , xhr_response.headers)
247+ print (" 返回地址" , xhr_response.url)
248+ print (" 返回内容" , xhr_response.content)
249+
250+
251+ if __name__ == " __main__" :
252+ TestRender().start()
253+
254+ ```
255+
256+
149257## 关闭当前浏览器
150258
151259``` python
0 commit comments