首页新闻找找看学习计划

已知用网站户名密码怎么实现自动登陆?

-1
悬赏园豆:20 [已解决问题] 解决于 2019-08-14 14:31

我的项目里有引用其他网页的内容,知道那个网站的网址,也有用户名和密码,想越过登陆页直接登陆,我试了好多方法都不行,求大神帮帮忙啊!

登陆页只有用户名、密码和提交按钮

风中灵叶的主页 风中灵叶 | 初学一级 | 园豆:142
提问于:2018-12-26 16:19
< >
分享
最佳答案
0

如果能走对方登录接口最方便,如果不行可以试试下面方法:
以登录清博大数据举例,登录后需要把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__()
收获园豆:20
ycyzharry | 专家六级 |园豆:18627 | 2018-12-26 16:24

大神,这是什么语言,没用过啊,我用的是html+js

风中灵叶 | 园豆:142 (初学一级) | 2018-12-26 17:03

@风中灵叶: python

ycyzharry | 园豆:18627 (专家六级) | 2018-12-26 17:55
其他回答(5)
1

涉及到JSONP跨域请求

寻找薛定谔的猫 | 园豆:105 (初学一级) | 2018-12-26 16:22

嗯,然后就不能操作了

支持(0) 反对(0) 风中灵叶 | 园豆:142 (初学一级) | 2018-12-26 16:59

@风中灵叶: 只要对方给你预留接口就可以,要经过授权

支持(0) 反对(0) 寻找薛定谔的猫 | 园豆:105 (初学一级) | 2018-12-26 17:39
0

你可以看看那个网站的登录的提交接口,你模仿他登录的过程将用户名和密码提交过去就可以了呀。

xiaobaiskill | 园豆:1012 (小虾三级) | 2018-12-26 16:22

我试了,没好使,他那个是一个函数,我自动运行那个函数,可是没用

支持(0) 反对(0) 风中灵叶 | 园豆:142 (初学一级) | 2018-12-26 17:01
0

运行时直接调用他的那个提交方法把用户名密码传过去

徒然喜欢你 | 园豆:1599 (小虾三级) | 2018-12-26 16:34
0

HttpClient做模拟登陆,参考:https://www.cnblogs.com/huanzi-qch/p/9418148.html

huanzi-qch | 园豆:217 (菜鸟二级) | 2018-12-26 17:00
0

Fiddler -> Raw
TCP->Write(Raw)
此方法模拟请求可以很简单做到完全一致。

花飘水流兮 | 园豆:10177 (专家六级) | 2018-12-27 10:13

大神,有例子么

支持(0) 反对(0) 风中灵叶 | 园豆:142 (初学一级) | 2019-01-15 14:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册