首页 > 解决方案 > Python 请求返回状态 200,但未执行预期操作

问题描述

我正在尝试创建一个可以同时喜欢具有多个配置文件的帖子的应用程序。我正在尝试并行化登录,并为每个登录的用户并行喜欢这些帖子,如下所示。

with ProcessPoolExecutor() as exe:
    bot = Insta()
    results = []
    for credential in credentials: # go through credentials, login in parallel.
        results.append(
            exe.submit(bot.login, credential) # Each login takes 15 sec
        ) # Add status of each process in a list
    for result in as_completed(results): # When complete, I call like
        if result.result() == 200:
            with Pool(4) as p:
                resp = p.map(bot.like, urls)
                print(resp)            

尽管将 status_code 200 返回给我,但当我查看帖子时,它并不受欢迎。

当我尝试为每次登录单独执行此操作时,它会向我返回相同的内容,但这一次,该帖子真的很受欢迎。那是:

bot = Insta()
resp = bot.login(credential)
if resp == 200:
    with Pool(5) as p:
        p.map(bot.like, urls)

谁能告诉我问题是什么?我想知道我是否做错了什么。我的like方法现在看起来像这样:

    def like(self, url_post):
        self._set_id_post(url_post)  # id of post
        resp = self.session.get(url_post)
        self.session.headers = {'user-agent': self.user_agent}
        self.session.headers.update({'Referer': url_post})
        self.session.headers.update({'X-CSRFToken': resp.cookies['csrftoken']}, )

        url = endpoints['like_url'] % self.post_id
        time.sleep(random.gauss(6, 1.5))
        response = self.session.post(url)
        self.session.headers.update({'X-CSRFToken': resp.cookies['csrftoken']})
        if response.status_code == 200:
            return response.status_code
        elif response.status_code == 403:
            return response.status_code

        elif response.status_code == 400:
            return response.status_code

标签: python-3.xpython-requestspython-multiprocessingconcurrent.futures

解决方案


我通过为每个用户设置代理解决了这个问题。我不得不买它,因为公众在我的情况下没有工作。但是对于那些在网络抓取方面遇到类似问题的人,除了社交网络之外,我将在此处插入我的代码之一,用于返回可能可以提供帮助的免费网站的代理精英。

def free_proxy_list():
    options = Options()
    options.headless = True
    driver = webdriver.Chrome(options=options)
    driver.get('https://free-proxy-list.net/')
    # Show only Elite Proxies
    driver.find_element_by_xpath('//*[@id="proxylisttable"]/tfoot/tr/th[5]/select/option[3]').click()
    # Show only SSl
    driver.find_element_by_xpath('//*[@id="proxylisttable"]/tfoot/tr/th[7]/select/option[3]').click()
    proxies = []
    # Paginate 1
    for i in range(1, 21):
        xpath_ip = driver.find_element_by_xpath('//*[@id="proxylisttable"]/tbody/tr[%s]/td[1]' % i).text
        xpath_port = driver.find_element_by_xpath('//*[@id="proxylisttable"]/tbody/tr[%s]/td[2]' % i).text
        proxy = xpath_ip + ":" + xpath_port
        proxies.append(proxy)
    # Paginate 2
    driver.find_element_by_xpath('//*[@id="proxylisttable_paginate"]/ul/li[4]/a').click()
    try:
        for i in range(1, 21):
            xpath_ip = driver.find_element_by_xpath('//*[@id="proxylisttable"]/tbody/tr[%s]/td[1]' % i).text
            xpath_port = driver.find_element_by_xpath('//*[@id="proxylisttable"]/tbody/tr[%s]/td[2]' % i).text
            proxy = xpath_ip + ":" + xpath_port
            proxies.append(proxy)
    except NoSuchElementException:
        return proxies

    return proxies

推荐阅读