我的项目里有引用其他网页的内容,知道那个网站的网址,也有用户名和密码,想越过登陆页直接登陆,我试了好多方法都不行,求大神帮帮忙啊!
登陆页只有用户名、密码和提交按钮
如果能走对方登录接口最方便,如果不行可以试试下面方法:
以登录清博大数据举例,登录后需要把cookie存本地,每次跑selenium时候就用谷歌跑:
#清博账号登录以及保存cookie
class Qingbo():
url = 'http://www.gsdata.cn/member/login'
def __init__(self):
self.data_path = cookie_path
if not os.path.exists('cookie'):
os.makedirs(self.data_path)
cap = webdriver.DesiredCapabilities.PHANTOMJS
cap["phantomjs.page.settings.resourceTimeout"] = 1000
# self.driver = webdriver.PhantomJS(desired_capabilities=cap)
self.driver = webdriver.Chrome()
self.driver.set_page_load_timeout(30)
def __del__(self):
self.driver.quit()
def save_cookie_to_file(self):
cookies = self.driver.get_cookies()
# print cookies
with codecs.open(cookie_path, mode='w+', encoding='utf-8') as f:
for cookie in cookies:
line = json.dumps(cookie, ensure_ascii=False) + '\n'
f.write(line)
def retry_get(self, url):
for retry in range(3):
try:
self.driver.get(url)
break
except TimeoutException:
self.driver.execute_script('window.stop()')
def login_in(self):
# try:
self.retry_get(self.url)
is_code = self.driver.find_element_by_xpath('//*[@id="wxLogin"]/p')
print(is_code.text)
if u'微信扫一扫' in is_code.text:
user_log_button = self.driver.find_element_by_xpath('/html//div[contains(@class,"login-box")]/div[contains(@class,"login-body")]/a[@class="login-type current"]')
print(user_log_button)
user_log_button.click()
uin_input = self.driver.find_element_by_name('username')
uin_input.clear()
uin_input.send_keys(QINGBO_USERNAME)
pwd_input = self.driver.find_element_by_name("password")
pwd_input.clear()
pwd_input.send_keys(QINGBO_PASSWORD)
pwd_input.send_keys(Keys.ENTER)
self.save_cookie_to_file()
self.__del__()
大神,这是什么语言,没用过啊,我用的是html+js
@风中灵叶: python
涉及到JSONP跨域请求
嗯,然后就不能操作了
@风中灵叶: 只要对方给你预留接口就可以,要经过授权
你可以看看那个网站的登录的提交接口,你模仿他登录的过程将用户名和密码提交过去就可以了呀。
我试了,没好使,他那个是一个函数,我自动运行那个函数,可是没用
运行时直接调用他的那个提交方法把用户名密码传过去
Fiddler -> Raw
TCP->Write(Raw)
此方法模拟请求可以很简单做到完全一致。
大神,有例子么