python-3.x - 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
解决方案
我通过为每个用户设置代理解决了这个问题。我不得不买它,因为公众在我的情况下没有工作。但是对于那些在网络抓取方面遇到类似问题的人,除了社交网络之外,我将在此处插入我的代码之一,用于返回可能可以提供帮助的免费网站的代理精英。
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
推荐阅读
- powershell - 使用 powershell 解析 xml 节点值
- php - PHP: do "+=" if exist, "=" if not exist
- c++ - std::visit 带有重载自由函数而不是函数对象的 std::variant
- html - Use SCSS variable based on ancestor class
- javascript - D3 条形图中缺少矩形对象
- google-cloud-pubsub - PubSub:水平扩展订阅者转发器
- php - Enable woocommerce actions screen option by default in wordpress
- linux - How to setup wildcard ssl in centos
- java - Jackson JsonProperty
- java - 为什么 JList 替换项目而不是添加?