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主要解决模拟登录和解决那种网络请求很复杂的逻辑自己又不会分析的情况

0
0

Python爬虫工程师实战 大数据时代必备

慕课网严选精品教程,高质量内容+服务!

2378 学习 · 1158 问题

查看课程