python报错defined_python问卷星报错NameError: name 'filename' is not defined
[Python] 純文本查看 復(fù)制代碼import sys
import getopt
from fake_useragent import UserAgent
from fake_useragent import FakeUserAgentError
import requests
from bs4 import BeautifulSoup
import re
import random
import time
import datetime
import os
import fake_info
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
'''
作者:normanbb
鏈接:https://github.com/NormanBB/WJX_Autosubmit
來源:Github
'''
'''調(diào)查頁面,獲取相關(guān)參數(shù)'''
# 獲取調(diào)查問卷的頁面
def get_fill_content(url, user_agent):
headers = {
'user-agent': user_agent,
"Connection": "close"
}
r1 = requests.get(url, headers=headers,verify=False)
setCookie = r1.headers['Set-Cookie']
CookieText = re.findall(r'acw_tc=.*?;', setCookie)[0] + re.findall(r'\.ASP.*?;', setCookie)[0] + re.findall(r'jac.*?;', setCookie)[0] + re.findall(r'SERVERID=.*;',setCookie)[0]
return r1.text,CookieText
# 從頁面中獲取curid,rn,jqnonce,starttime,同時(shí)構(gòu)造ktimes用作提交調(diào)查問卷
def get_submit_query(content):
curid = re.search(r'\d{8}',content).group()
rn = re.search(r'\d{9,10}\.\d{8}',content).group()
jqnonce= re.search(r'.{8}-.{4}-.{4}-.{4}-.{12}',content).group()
ktimes = random.randint(5, 18)
starttime = (datetime.datetime.now()-datetime.timedelta(minutes=1)).strftime("%Y/%m/%d %H:%M:%S")
return curid, rn, jqnonce, ktimes, starttime
#通過ktimes,jqnonce構(gòu)造jqsign
def get_jqsign(ktimes, jqnonce):
result = []
b = ktimes % 10
if b == 0:
b = 1
for char in list(jqnonce):
f = ord(char) ^ b
result.append(chr(f))
return ''.join(result)
'''獲取隨機(jī)答案'''
# 獲取調(diào)查問卷的題目
def get_title_list(content):
main_soup = BeautifulSoup(content, 'lxml')
title_soup_list = main_soup.find_all(id=re.compile(r'div\d'))
title_list = []
for title_soup in title_soup_list:
title_str = title_soup.find(class_='div_title_question').get_text().strip()
choice_list = [choice.get_text() for choice in title_soup.find_all('label')]
title_dict = {
'title': title_str,
'choice_list': choice_list,
'is_choice': len(choice_list) != 0
}
title_list.append(title_dict)
return title_list
# 隨機(jī)選擇
def random_choose(title_list):
answer_list = []
for title in title_list:
if title['is_choice']:
title['answer'] = random.randint(1, len(title['choice_list']))
else:
title['answer'] = ''
answer_list.append(title['answer'])
return answer_list
#構(gòu)造符合樣式的提交數(shù)據(jù)
def get_submit_data(title_list,answer_list):
form_data = ''
for num in range(len(title_list)):
form_data += str(num+1) + '$' + str(answer_list[num]) + '}'
return form_data[:-1]
def Auto_WjX(ip_list):
try:
user_agent = UserAgent().random
except FakeUserAgentError:
user_agent = proxy.get_agent()
#ip_list = proxy.choose_proxy(filename)
ip = random.choice(ip_list)
fill_content,cookies = get_fill_content(fill_url,user_agent)#網(wǎng)頁源代碼,cookies
title_list = get_title_list(fill_content) #所有題目
'''獲取相關(guān)參數(shù)'''
curid, rn, jqnonce, ktimes,starttime = get_submit_query(fill_content)
jqsign = get_jqsign(ktimes,jqnonce)
time_stamp = '{}{}'.format(int(time.time()), random.randint(100, 200)) # 生成一個(gè)時(shí)間戳,最后三位為隨機(jī)數(shù)
#curid, time_stamp, starttime, ktimes, rn, jqnonce, jqsign
FormData = {
'submittype': '1',
'curID': curid,
't': time_stamp,
'starttime': starttime,
'rn': rn,
'hlv': '1',
'ktimes':ktimes,
'jqnonce':jqnonce,
'jqsign':jqsign,
}
url = 'https://www.wjx.cn/joinnew/processjq.ashx'
headers = {
"Host": "www.wjx.cn",
"Connection": "close",
"User-Agent": user_agent,
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "en, zh-CN;q=0.9, zh;q=0.8",
"Referer": fill_url,
"Cookie": cookies,
}
#作隨機(jī)選擇
random_data = random_choose(title_list)
#構(gòu)造符合樣式的提交數(shù)據(jù)
#自定義答案可以將選擇與構(gòu)造部分去除
submit_data = get_submit_data(title_list,random_data)
data = {'submitdata':str(submit_data)}
#data = {'submitdata': '1$2}2$1}3$2}4$2}5$1}6$1}7$1}8$3}9$3}10$1}11$2}12$2}13$1'}
# 發(fā)送請求
try:
r = requests.post(url=url, headers=headers, data=data, params=FormData, proxies={
"https":ip}, verify=False, timeout=10)
#通過測試返回?cái)?shù)據(jù)中表示成功與否的關(guān)鍵數(shù)據(jù)(’10‘or '22s')在開頭,所以只需要提取返回?cái)?shù)據(jù)中前兩位元素
result = r.text[0:2]
return result
except(requests.exceptions.ProxyError,requests.exceptions.ConnectTimeout):
print(f'代{過}{濾}理 {ip} 不可用')
ip_list.remove(ip)
except requests.exceptions.ReadTimeout:
pass
def main(times):
PostNum = 0
times=int(times)
print('程序開始運(yùn)行')
ip_list = proxy.choose_proxy(filename)
# i 為 提交次數(shù)
# 若需達(dá)到某特定次數(shù)
#while i < Postnum:
for i in range(times):
try:
result= Auto_WjX(ip_list)
if int(result) in [10]:
print('[ Response : %s ] ===> 提交成功!!!!' % result)
PostNum += 1
time.sleep(5) # 設(shè)置休眠時(shí)間,這里要設(shè)置足夠長的休眠時(shí)間
else:
print('[ Response : %s ] ===> 提交失敗!!!!' % result)
#捕獲錯(cuò)誤
except(TypeError,IndexError,ValueError):
#print('跳過')
continue
print('程序運(yùn)行結(jié)束,成功提交%s份調(diào)查報(bào)告' % PostNum) # 總結(jié)提交成功的數(shù)量,并打印
os.remove(filename)
for i in ip_list:
with open(filename, 'a+') as f:
f.write('{0}\n'.format(format(i)))
def various_options():
#根據(jù)參數(shù)匹配不同條件
global filename
opts,args = getopt.getopt(sys.argv[1:], '-p-l-h', ['pool', 'list', 'help'])
for opt_name, opt_value in opts:
if opt_name in ('-p', '--pool'):
try:
if os.path.exists('proxy_pool_temp.list'):
continue
else:
try:
if os.path.exists('proxy_pool.list'):
continue
else:
print('use proxy from github.com/jhao104/proxy_pool')
proxy.get_proxy('pool')
finally:
proxy.validate_proxy('proxy_pool.list')
finally:
filename = 'proxy_pool_temp.list'
print('使用驗(yàn)證proxy_pool代{過}{濾}理')
elif opt_name in ('-l', '--list'):
try:
if os.path.exists('proxy_list_temp.list'):
continue
else:
try:
if os.path.exists('proxy_list.list'):
continue
else:
print('use proxy from www.proxy-list.download')
proxy.get_proxy('list')
finally:
proxy.validate_proxy('proxy_list.list')
finally:
filename = 'proxy_list_temp.list'
print('使用驗(yàn)證proxy-list代{過}{濾}理')
elif opt_name in ('-h', '--help'):
print(r'''
Usage: WJX_Autosubmit.py [OPTIONS]
Options:
-p or --pool Use proxy from github.com/jhao104/proxy_pool
-l or --list Use proxy from www.proxy-list.download
-h or --help Show this message and exit.
'''
)
sys.exit()
if __name__ == '__main__':
print(r"""
本程序用于構(gòu)建隨機(jī)答案填寫問卷星問卷
""")
proxy = fake_info.proxy()
various_options()
fill_url = input('輸入問卷地址:')
times = input('輸入提交次數(shù):')
main(times)
總結(jié)
以上是生活随笔為你收集整理的python报错defined_python问卷星报错NameError: name 'filename' is not defined的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java怎么给list集合排序_java
- 下一篇: feign post 传递空值_听我讲完