{"id":1020,"date":"2022-06-19T22:12:40","date_gmt":"2022-06-19T14:12:40","guid":{"rendered":"http:\/\/175.24.184.226\/?p=1020"},"modified":"2022-07-27T16:45:25","modified_gmt":"2022-07-27T08:45:25","slug":"pyppeteer%e9%80%9a%e7%94%a8%e6%a8%a1%e6%9d%bf","status":"publish","type":"post","link":"\/?p=1020","title":{"rendered":"pyppeteer\u901a\u7528\u6a21\u677f"},"content":{"rendered":"<hr \/>\n<pre><code class=\"language-python\">import asyncio\nimport time\nfrom loguru import logger\nlogger.add(&quot;out.log&quot;, rotation=&quot;100 MB&quot;, backtrace=True, diagnose=True)\n\nfrom subprocess import call\nfrom multiprocessing import Process\nfrom fake_useragent import UserAgent\nfrom pyppeteer import launch\nua = UserAgent()\nclass Spider:\n    def __init__(self):\n        self.url = &quot;https:\/\/search.shopping.naver.com\/catalog\/19374887080?query=ADATA%20HD330%20USB3.1&amp;NaPm=ct%3Dl4i53xi8%7Cci%3D7610a9621d487f37cd7a8e1cf287613ee02f1b25%7Ctr%3Dslsl%7Csn%3D95694%7Chk%3D45f91bfab8555ace9e5d7236982a0e7fffc115b0&quot;\n        self.headers = {\n    &quot;accept&quot;: &quot;text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/avif,image\/webp,image\/apng,*\/*;q=0.8,application\/signed-exchange;v=b3;q=0.9&quot;,\n    &quot;accept-encoding&quot;: &quot;gzip, deflate, br&quot;,\n    &quot;accept-language&quot;: &quot;zh-CN,zh;q=0.9&quot;,\n    &quot;cache-control&quot;: &quot;no-cache&quot;,\n    &quot;pragma&quot;: &quot;no-cache&quot;,\n    &quot;sec-fetch-dest&quot;: &quot;document&quot;,\n    &quot;sec-fetch-mode&quot;: &quot;navigate&quot;,\n    &quot;sec-fetch-site&quot;: &quot;none&quot;,\n    &quot;sec-fetch-user&quot;: &quot;?1&quot;,\n    &quot;upgrade-insecure-requests&quot;: &quot;1&quot;,\n    &quot;user-agent&quot;: ua.random\n}\n\n    async def get_html(self, i, num):\n        browser = await launch(\n            # headless=False,\n            headless=True,\n            dumpio=True,\n            # dumpio=False,\n            autoClose=True, devtools=False,\n            userDataDir=r&quot;D:\\temporary&quot;,\n            args=[&#039;--disable-infobars&#039;,\n                  # &#039;--no-sandbox&#039;,\n                  &#039;--proxy-server=u6213.20.tn.16yun.cn:****&#039;,\n                  &#039;--disable-setuid-sandbox&#039;,\n                  &#039;--window-size=1366,850&#039;,\n\n                  ]\n        )\n        page = await browser.newPage()\n        # page = await browser.pages()\n        await page.setViewport({&#039;width&#039;: 1366, &#039;height&#039;: 768})\n        await page.authenticate({\n            &#039;username&#039;: &#039;******&#039;,\n            &#039;password&#039;: &#039;******&#039;\n        })\n\n        await page.setUserAgent(&#039;Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/94.0.4606.61 Safari\/537.36&#039;)\n        try:\n            await page.goto(self.url, {&#039;timeout&#039;: 30 * 1000})\n            page_title = await page.title()\n            if &quot;ADATA HD330 USB3.1&quot; in page_title:\n                # await asyncio.sleep(2)\n                # await page.evaluate(&#039;window.scrollTo(0,document.body.800)&#039;)\n\n                # await page.evaluate(&#039;window.scrollTo(0,document.body.800)&#039;)\n                # selector = &#039;#__next &gt; div &gt; div.style_container__3iYev &gt; div.style_inner__1Eo2z &gt; div.style_content_wrap__2VTVx &gt; div.style_content__36DCX &gt; div &gt; div.summary_info_area__3XT5U &gt; div.condition_area &gt; table &gt; tbody &gt; tr:nth-child(6) &gt; td.productByMall_mall_area__1oEU_ &gt; div &gt; a&#039;\n                # \u70b9\u51fb\u7279\u5b9a\u5143\u7d20\n                selector = &#039;#__next &gt; div &gt; div.style_container__3iYev &gt; div.style_inner__1Eo2z &gt; div.style_content_wrap__2VTVx &gt; div.style_content__36DCX &gt; div &gt; div.summary_info_area__3XT5U &gt; div.condition_area &gt; table &gt; tbody &gt; tr:nth-child(4) &gt; td.productByMall_mall_area__1oEU_ &gt; div &gt; a&#039;\n                await page.click(selector)\n                await asyncio.sleep(2)\n                # print(&quot;\u8fdb\u7a0b{}\uff1a\u5237\u65b0{}\u6b21&quot;.format(num, i))\n                await page.evaluate(&#039;window.scrollTo(0,200)&#039;)\n                await page.evaluate(&#039;window.scrollTo(200,400)&#039;)\n                await page.evaluate(&#039;window.scrollTo(400,800)&#039;)\n                logger.info(&quot;\u8fdb\u7a0b{}\uff1a\u5237\u65b0{}\u6b21&quot;.format(num, i))\n                time.sleep(2)\n\n                await browser.close()\n\n        except Exception as e:\n            logger.error(e)\n        finally:\n            await browser.close()\n    def run(self, num):\n        i = 1\n        while True:\n            try:\n                asyncio.get_event_loop().run_until_complete(self.get_html(i, num))\n            except Exception as e:\n                logger.error(e)\n            i += 1\n\nif __name__ == &#039;__main__&#039;:\n    # Spider().run(2)\n    for num in range(5):\n        p1 = Process(target=Spider().run, args=(str(num),))\n        p1.start()\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>import asyncio import time from loguru import logger logger.add(&#038;quo   \u2026 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0},"categories":[50],"tags":[54,55],"_links":{"self":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts\/1020"}],"collection":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1020"}],"version-history":[{"count":2,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/1020\/revisions"}],"predecessor-version":[{"id":1255,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/1020\/revisions\/1255"}],"wp:attachment":[{"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1020"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1020"},{"taxonomy":"post_tag","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1020"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}