selenuim无视窗模式和视窗模式对代码响应时间不相同
来源:12-5 scrapy集成随机useragent和ip代理

有料
2020-02-13
老师 我自己写了一个nike的爬虫 https://www.nike.com/cn/w/jordan-shoes-37eefzy7ok
这个网页必须下拉刷新数据,但是用有视窗模式可以完整请求到数据 用无视窗模式还没拉完就停掉了 这里是因为无视窗模式对网络请求响应速度偏慢吗? 代码内部也改了很多次了 调整循环次数或者是调整sleep时间,都没有起到效果
而且还有个疑问 下拉是操作像素值的 在无视窗模式下 模拟出来的浏览器的y值又是多少呢? 是否是因为y值取得不够多?
class NikeProDownloadMiddleware(object):
def process_request(self,request,spider):
pass
def process_response(self,request,response,spider):
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('blink-settings=imagesEnabled=false')
self.browser = webdriver.Chrome(executable_path="E:programpythonchrome_driverchromedriver.exe",options=chrome_options)
self.browser.get(request.url)
if request.url == "https://www.nike.com/cn/w/jordan-shoes-37eefzy7ok":
self.getMoreByXpath()
time.sleep(2)
html = self.browser.page_source
self.browser.quit()
return HtmlResponse(url=request.url, body=html.encode('utf-8'), encoding='utf-8', request=request)
def getMoreByXpath(self):
t = True
i = 1
while t:
try:
click_ele = self.browser.find_element_by_xpath("//div[@class='css-1d6du98']")
click_ele.click()
time.sleep(5)
except NoSuchElementException as e:
self.getMoreByScrollDown()
t = False
def getMoreByScrollDown(self):
t = True
i = 1
while t:
check_height = self.browser.execute_script("return document.body.scrollHeight;")
for r in range(20):
t = random.uniform(3, 5)
time.sleep(t)
self.browser.execute_script("window.scrollBy(0,5000)")
print('第%s次下拉操作' % str(i))
i += 1
check_height1 = self.browser.execute_script("return document.body.scrollHeight;")
print(str(check_height) + '**************' + str(check_height1))
if check_height == check_height1:
print("退出下拉")
t = False
写回答
1回答
-
bobby
2020-02-14
其实对于这种下拉的模式不一定非要使用selenium 只要分析出网络请求了 就没有必要使用selenium了啊,而且性能还高, selenium主要解决模拟登录和解决那种网络请求很复杂的逻辑自己又不会分析的情况
00
相似问题