Skip to content

Commit 8d9bf91

Browse files
committed
Fix info sharing between req and download mw with Request.meta
The canonical way to share info between `Request` and download middleware is `Request.meta`. Custom attributes `Request.custom_attr` should be avoided, cause they may be dropped after possible serialization and de-serialization in `Scheduler`. E.g. `scrapy-redis` converts `Request` into dict with `scrapy.utils.reqpar.request_to_dict()`. Custom attribute on `Request` will be lost.
1 parent 2e557f6 commit 8d9bf91

File tree

2 files changed

+14
-11
lines changed

2 files changed

+14
-11
lines changed

scrapy_selenium/http.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,12 @@ def __init__(self, wait_time=None, wait_until=None, screenshot=False, script=Non
2424
2525
"""
2626

27-
self.wait_time = wait_time
28-
self.wait_until = wait_until
29-
self.screenshot = screenshot
30-
self.script = script
31-
27+
meta = {
28+
"wait_time": wait_time,
29+
"wait_until": wait_until,
30+
"screenshot": screenshot,
31+
"script": script,
32+
}
33+
meta.update(kwargs.pop("meta", {}))
34+
kwargs["meta"] = meta
3235
super().__init__(*args, **kwargs)

scrapy_selenium/middlewares.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -110,16 +110,16 @@ def process_request(self, request, spider):
110110
}
111111
)
112112

113-
if request.wait_until:
114-
WebDriverWait(self.driver, request.wait_time).until(
115-
request.wait_until
113+
if request.meta.get('wait_until'):
114+
WebDriverWait(self.driver, request.meta.get('wait_time')).until(
115+
request.meta.get('wait_until')
116116
)
117117

118-
if request.screenshot:
118+
if request.meta.get('screenshot'):
119119
request.meta['screenshot'] = self.driver.get_screenshot_as_png()
120120

121-
if request.script:
122-
self.driver.execute_script(request.script)
121+
if request.meta.get('script'):
122+
self.driver.execute_script(request.meta.get('script'))
123123

124124
body = str.encode(self.driver.page_source)
125125

0 commit comments

Comments
 (0)