精华内容
下载资源
问答
  • 方法 模拟登陆
    2021-04-22 03:59:41

    php模拟登陆的实现方法

    php模拟登陆的实现方法,这里分别列举两种方法实现模拟登陆人人网。具体实例代码如下:

    (1)使用snoopy模拟登陆

    referer='http://www.renren.com/';

    $snoopy->agent="Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20100101 Firefox/22.0";

    $submit_vars['email'] ='登陆账号';

    $submit_vars['password'] ='登陆密码';

    $url='http://www.renren.com/PLogin.do';//登陆数据提交的URL地址

    $snoopy->submit($url,$submit_vars);

    $snoopy->fetch("http://www.renren.com/");//希望获取的页面数据

    echo $snoopy->results;//www.phpernote.com

    (2)使用curl模拟登陆

    您可能感兴趣的文章php模拟post请求的方法总结

    PHP 异步执行方法,模拟多线程

    php模拟ping命令的方法

    如何设置phpmyadmin自动登陆和取消自动登录

    php模拟发送get请求

    phpmyadmin如何设置自动登陆

    php分别模拟发送GET和POST请求

    php window平台模拟checkdnsrr函数检测email是否真实存在

    http://www.bkjia.com/PHPjc/918384.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/918384.htmlTechArticlephp模拟登陆的实现方法 php模拟登陆的实现方法,这里分别列举两种方法实现模拟登陆人人网。具体实例代码如下: (1)使用snoopy模拟登陆...

    更多相关内容
  • 下面小编就为大家带来一篇使用Post方法模拟登陆爬取网页的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 主要介绍了php模拟登陆的实现方法,实例分析了snoopy与curl两种实现方法,具有一定参考借鉴价值,需要的朋友可以参考下
  • 主要介绍了Python 模拟登陆的两种实现方法的相关资料,这里提供两种方法一个是普通写法写的,另外一个是基于面向对象写的,模拟登录成功后才可能抓取内容,需要的朋友可以参考下
  • 主要介绍了PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法,实例分析了php实用curl模拟登陆163邮箱的操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 主要介绍了python requests模拟登陆github的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 本文实例讲述了PHP实现微信模拟登陆并给用户发送消息的方法。分享给大家供大家参考,具体如下: <?php /* 原作者:https://github.com/itziy/wechat 修改:Server getUserFakeid函数 获取fakeid的正则匹配公式 ...
  • php模拟登陆的实现方法分析_.docx
  • 主要介绍了python项目实战:模拟登陆CSDN,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 平时用浏览器看网页的时候,点击一下submit按钮的时候其实就是给服务器发送了一个POST请求。但是如何在自己的C#程序里面实现类似的功能呢?本文给出具体的实现方法并详细说明其实现难点。
  • 电子政务-基于模拟登陆的信息系统电子巡检方法.zip
  • 详解爬虫模拟登陆的三种方法

    万次阅读 多人点赞 2019-06-09 15:13:01
    摘要:在进行爬虫时,除了常见...本文以只需输入账号密码就能登录的桔子网为例,介绍模拟登录常用的 3 种方法。 POST 请求方法:需要在后台获取登录的 URL并填写请求体参数,然后 POST 请求登录,相对麻烦; ...

    摘要: 在进行爬虫时,除了常见的不用登录就能爬取的网站,还有一类需要先登录的网站。比如豆瓣、知乎,以及上一篇文章中的桔子网。这一类网站又可以分为:只需输入帐号密码、除了帐号密码还需输入或点击验证码等类型。本文以只需输入账号密码就能登录的桔子网为例,介绍模拟登录常用的 3 种方法。

    • POST 请求方法:需要在后台获取登录的 URL并填写请求体参数,然后 POST 请求登录,相对麻烦;

    • 添加 Cookies 方法:先登录将获取到的 Cookies 加入 Headers 中,最后用 GET 方法请求登录,这种最为方便;

    • Selenium 模拟登录:代替手工操作,自动完成账号和密码的输入,简单但速度比较慢。

    下面,我们用代码分别实现上述 3 种方法。

    1. 目标网页

    这是我们要获取内容的网页:

    http://radar.itjuzi.com/investevent

     

    这个网页需要先登录才能看到数据信息,登录界面如下:

     

    可以看到,只需要输入账号和密码就可以登录,不用输验证码,比较简单。下面我们利用一个测试账号和密码,来实现模拟登录。

    2. POST 提交请求登录

    首先,我们要找到 POST 请求的 URL。

    有两种方法,第一种是在网页 devtools 查看请求,第二种是在 Fiddler 软件中查看。

    先说第一种方法。

     

    在登录界面输入账号密码,并打开开发者工具,清空所有请求,接着点击登录按钮,这时便会看到有大量请求产生。哪一个才是 POST 请求的 URL呢?这个需要一点经验,因为是登录,所以可以尝试点击带有 「login」字眼的请求。这里我们点击第四个请求,在右侧 Headers 中可以看到请求的 URL,请求方式是 POST类型,说明 URL 找对了。

     

    接着,我们下拉到 Form Data,这里有几个参数,包括 identify 和 password,这两个参数正是我们登录时需要输入的账号和密码,也就是 POST 请求需要携带的参数。

     

    参数构造非常简单,接下来只需要利用 Requests.post 方法请求登录网站,然后就可以爬取内容了。

    下面,我们尝试用 Fiddler 获取 POST 请求。

    如果你对 Fiddler 还不太熟悉或者没有电脑上没有安装,可以先了解和安装一下。

    Fiddler 是位于客户端和服务器端的 HTTP 代理,也是目前最常用的 HTTP 抓包工具之一 。 它能够记录客户端和服务器之间的所有 HTTP 请求,可以针对特定的 HTTP 请求,分析请求数据、设置断点、调试 web 应用、修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是 web 调试的利器。

    Fiddler 下载地址:

    https://www.telerik.com/download/fiddler

    使用教程:

    https://zhuanlan.zhihu.com/p/37374178

    http://www.hangge.com/blog/cache/detail_1697.html

    下面,我们就通过 Fiddler 截取登录请求。

    当点击登录时,官场 Fiddler 页面,左侧可以看到抓取了大量请求。通过观察,第15个请求的 URL中含有「login」字段,很有可能是登录的 POST 请求。我们点击该请求,回到右侧,分别点击「inspectors」、「Headers」,可以看到就是 POST 请求,该 URL 和上面的方法获取的 URL 是一致的。

     

    接着,切换到右侧的 Webforms 选项,可以看到 Body 请求体。也和上面方法中得到的一致。

     

    获取到 URL 和请求体参数之后,下面就可以开始用 Requests.post 方法模拟登录了。

    代码如下:

     1import requests
     2headers = {
     3    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
     4    }
     5data = {
     6    'identity':'irw27812@awsoo.com',   
     7    'password':'test2018',
     8}
     9url ='https://www.itjuzi.com/user/login?redirect=&flag=&radar_coupon='
    10session = requests.Session()
    11session.post(url,headers = headers,data = data)
    12# 登录后,我们需要获取另一个网页中的内容
    13response = session.get('http://radar.itjuzi.com/investevent',headers = headers)
    14print(response.status_code)
    15print(response.text)
    

    使用 session.post 方法提交登录请求,然后用 session.get 方法请求目标网页,并输出 HTML代码。可以看到,成功获取到了网页内容。

     

    下面,介绍第 2 种方法。

    3. 获取 Cookies,直接请求登录

    上面一种方法,我们需要去后台获取 POST 请求链接和参数,比较麻烦。下面,我们可以尝试先登录,获取 Cookie,然后将该 Cookie 添加到 Headers 中去,然后用 GET 方法请求即可,过程简单很多。

    代码如下:

     1import requests
     2headers = {
     3    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
     4    'Cookie': '你的cookie',
     5}
     6url = 'https://www.itjuzi.com/user/login?redirect=&flag=&radar_coupon='
     7session = requests.Session()
     8response = session.get('http://radar.itjuzi.com/investevent', headers=headers)
     9
    10print(response.status_code)
    11print(response.text)
    

    可以看到,添加了 Cookie 后就不用再 POST 请求了,直接 GET 请求目标网页即可。可以看到,也能成功获取到网页内容。

     

    下面介绍第 3 种方法。

    4. Selenium 模拟登录

    这个方法很直接,利用 Selenium 代替手动方法去自动输入账号密码然后登录就行了。

    代码如下:

     1from selenium import webdriver
     2from selenium.webdriver.common.by import By
     3from selenium.webdriver.support import expected_conditions as EC
     4from selenium.webdriver.support.wait import WebDriverWait
     5browser = webdriver.Chrome()
     6browser.maximize_window()  # 最大化窗口
     7wait = WebDriverWait(browser, 10) # 等待加载10s
     8
     9def login():
    10    browser.get('https://www.itjuzi.com/user/login')
    11    input = wait.until(EC.presence_of_element_located(
    12        (By.XPATH, '//*[@id="create_account_email"]')))
    13    input.send_keys('irw27812@awsoo.com')
    14    input = wait.until(EC.presence_of_element_located(
    15        (By.XPATH, '//*[@id="create_account_password"]')))
    16    input.send_keys('test2018')
    17    submit = wait.until(EC.element_to_be_clickable(
    18        (By.XPATH, '//*[@id="login_btn"]')))
    19    submit.click() # 点击登录按钮
    20    get_page_index()
    21
    22def get_page_index():
    23    browser.get('http://radar.itjuzi.com/investevent')
    24    try:
    25        print(browser.page_source)  # 输出网页源码
    26    except Exception as e:
    27        print(str(e))
    28login()
    

    这里,我们在网页中首先定位了账号节点位置:'//*[@id="create_account_email"]',然后用 input.send_keys 方法输入账号,同理,定位密码框位置并输入密码。接着定位 登录 按钮的位置://*[@id="login_btn"],然后用 submit.click() 方法实现点击登录按钮操作,从而完成登录。可以看到,也能成功获取到网页内容。

     

    以上就是模拟需登录网站的几种方法。当登录进去后,就可以开始爬取所需内容了。

    源代码可以在下面链接中获得:

    https://github.com/makcyun/web_scraping_with_python

    5. 总结:

    • 本文分别实现了模拟登录的 3 种操作方法,建议优先选择第 2 种,即先获取 Cookies 再 Get 请求直接登录的方法。

    • 本文模拟登录的网站,仅需输入账号密码,不需要获取相关加密参数,比如 Authenticity_token ,同时也无需输入验证码,所以方法比较简单。但是还有很多网站模拟登录时,需要处理加密参数、验证码输入等问题。后续将会介绍。

    本文完。

    展开全文
  • scrapy基础知识之发送POST请求:可以使用 yield scrapy.FormRequest(url, formdata, callback)方法发送POST请求。如果希望程序执行一开始就发送POST请求,可以重写Spider类的start_requests(self) 方法,并且不再...

    Scrapy模拟表单和Ajax发送POST请求

    scrapy.FormRequest

    普通请求使用scrapy.Request类就可以实现,但是遇到模拟表单或Ajax提交post请求的时候,Request类就不如 子类 FormRequest类方便了,因为他自带 formdata ,专门用来设置表单字段数据,默认method也是POST。

    def start_requests(self):
        form_data = {'f1':'1', 'f2':'100'}  # 表单数据,字典格式,注意数字也要用引号引起来,否则报错。
        yield scrapy.FormRequest(url, formdata=form_data) # 还可以通过callback修改回调函数等
    • 1
    • 2
    • 3

    参考: 
    http://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/request-response.html?highlight=post#formrequest-objects 
    https://stackoverflow.com/questions/39012902/scrapy-making-request-with-post-method

    scrapy.http.FormRequest

    还有其他方法,如scrapy.http.FormRequest,但是感觉不如以上方法方便:


    return [scrapy.http.FormRequest(
        self.myurl, 
        formdata={'f1':'123','f2':'456'},
        callback=self.parse)]
    eg:

     from scrapy.item import Item, Field
    from scrapy.http import FormRequest
    from scrapy.spider import BaseSpider
    
    
    class DeltaItem(Item):
        title = Field()
        link = Field()
        desc = Field()
    
    
    class DmozSpider(BaseSpider):
        name = "delta"
        allowed_domains = ["delta.com"]
        start_urls = ["http://www.delta.com"]
    
        def parse(self, response):
            yield FormRequest.from_response(response,
                                            formname='flightSearchForm',
                                            formdata={'departureCity[0]': 'JFK',
                                                      'destinationCity[0]': 'SFO',
                                                      'departureDate[0]': '07.20.2013',
                                                      'departureDate[1]': '07.28.2013'},
                                            callback=self.parse1)
    
        def parse1(self, response):
            print response.status

    scrapy基础知识之发送POST请求:

    • 可以使用 yield scrapy.FormRequest(url, formdata, callback)方法发送POST请求。

    • 如果希望程序执行一开始就发送POST请求,可以重写Spider类的start_requests(self) 方法,并且不再调用start_urls里的url。

    class mySpider(scrapy.Spider):
        # start_urls = ["http://www.example.com/"]
    
        def start_requests(self):
            url = 'http://www.renren.com/PLogin.do'
    
            # FormRequest 是Scrapy发送POST请求的方法
            yield scrapy.FormRequest(
                url = url,
                formdata = {"email" : "xxx", "password" : "xxxxx"},
                callback = self.parse_page
            )
        def parse_page(self, response):
            # do something

    scrapy基础知识之 使用FormRequest.from_response()方法模拟用户登录:

    通常网站通过 实现对某些表单字段(如数据或是登录界面中的认证令牌等)的预填充

    使用Scrapy抓取网页时,如果想要预填充或重写像用户名、用户密码这些表单字段, 可以使用 FormRequest.from_response() 方法实现。

    下面是使用这种方法的爬虫例子:

    import scrapy
    
    class LoginSpider(scrapy.Spider):
        name = 'example.com'
        start_urls = ['http://www.example.com/users/login.php']
    
        def parse(self, response):
            return scrapy.FormRequest.from_response(
                response,
                formdata={'username': 'john', 'password': 'secret'},
                callback=self.after_login
            )
    
        def after_login(self, response):
            # check login succeed before going on
            if "authentication failed" in response.body:
                self.log("Login failed", level=log.ERROR)
                return

    展开全文
  • PHP模拟登陆163邮箱发邮件及猎取通讯录列表的方法_.docx
  • python-模拟登陆多种方法总结

    千次阅读 2020-12-14 01:12:45
    python-模拟登陆 环境:python3 一、已知cookie模拟登陆 测试网站:http://zxjf.ecjtu.edu.cn/ 1.1、urllib 登陆一个网站,然后burpsuite抓包获取cookie,模拟登陆代码如下: 限制:比如测试的网站...

    python-模拟登陆

    目录

    python-模拟登陆

    一、已知cookie模拟登陆

    1.1、urllib

    1.2.requests

    二、python模拟登录获取cookie和post获取cookie

    ​三、selenium模拟登陆

    3.1.常见的函数使用

    3.2.html中的定位元素

    1.find_element_by_id--定位id属性

    四.socket模拟登陆

    socket拓展:


     

    环境:python3
     

    一、已知cookie模拟登陆

    测试网站:http://zxjf.ecjtu.edu.cn/

    1.1、urllib

    登陆一个网站,然后burpsuite抓包获取cookie,模拟登陆代码如下:
    限制:比如测试的网站cooki是一个会话,当会话结束时,之前的cookie便过期了,此时再次模拟登陆将会失败。
    #urllib.request:用于处理从 urls 接收的数据
    from urllib import request
    import json
    ​
    ​
    #登录后才能访问的网站
    url = 'http://zxjf.ecjtu.edu.cn/Student/index.aspx'
    ​
    #浏览器登录后得到的cookie,也就是刚才复制的字符串
    cookie = r'ASP.NET_SessionId=jm4iqsy1aten3qdkxm5vcl4r'
    ##将url和请求数据处理为一个Request对象,供urlopen调用
    req = request.Request(url)
    #设置cookie
    req.add_header('cookie', cookie)
    #设置请求头
    req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36')
    #用于实现对目标url的访问。
    resp = request.urlopen(req)
    #read()方法通过utf-8编码读取返回数据内容
    print(resp.read().decode('utf-8'))
    #print(resp.info()) #获取头部信息,包括Content-Type、Server、X-AspNet-Version、X-Powered-By、Cache-Control等常见字段信息

     

     

    1.2.requests

    #request获取​
    import requests
    #登录后才能访问的网页
    url = 'http://zxjf.ecjtu.edu.cn/Student/index.aspx'
    #浏览器登录后得到的cookie,也就是刚才复制的字符串
    cookie = r'ASP.NET_SessionId=jm4iqsy1aten3qdkxm5vcl4r'
    #把cookie字符串处理成字典,以便接下来使用
    cookies = {}
    for line in cookie.split(';'):
        key, value = line.split('=', 1)
        cookies[key] = value
    ​
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'}
    #在发送get请求时带上请求头和cookies
    resp = requests.get(url, headers = headers, cookies = cookies)
    ​
    print(resp.content.decode('utf-8')) #返回响应包的整个响应包

     

     

    二、python模拟登录获取cookie和post获取cookie

    先放一个大致的框架,后面的终极代码我们再看
    模拟post请求获取返回包中的cookie
    from urllib import request
    import urllib.parse
    import requests
    ​
    #登录后才能访问的网站
    url = 'http://jsnu.fuyunweb.com/manage/admin/pt_login.aspx'
    ​
    data = {
            "action":"login",
            "uid":"用户名",
            "pass":"密码"
            }
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'}
    resp = requests.post(url=url,data=data,headers=headers)
    print(resp.status_code)#输出请求状态码
    print(resp.url)#输出请求url
    print(resp.text)#输出请求返回的内容
    print(resp.headers)#输出响应包的请求头信息
    print("set-cookie:" + resp.headers['Set-Cookie'])#输出cookie信息

     

     
     
    返回的内容如下,
    200
    http://jsnu.fuyunweb.com/manage/admin/pt_login.aspx
    success<$$$$>/manage/admin/admin_pt_main.aspx<$$$$>/manage/admin/admin_pt_order_mydbgd.aspx
    #一下为输出的cookie信息
    set-cookie:userinfo=; expires=Sat, 12-Dec-2020 04:23:18 GMT; path=/, userinfo=userid=ZTxan6d5Aja4AMMDe5yu&uid=pCRUyMSkr5XlOxie3ganHRdIJ7fQDe5yuDe5yu&pass=837A6C7DDD08D1629D0F1394190687EE&schoolid=7YTECdKVMaQDe5yu&cookid=bca6d466-da54-4f76-a41a-e03093d2867e; domain=jsnu.fuyunweb.com; expires=Sat, 02-Jan-2021 04:23:18 GMT; path=/; HttpOnly

     

     
    cookie模拟登录:利用cookiejar获取cookie,然后利用获取的cookie再次去请求需要访问的访问的网页。代码如下:
    #方法二:模拟post请求,获取cookie包,然后进行登录
    #cookiejar获取并处理cookie参数。
    from urllib import request
    import urllib.parse
    from http import cookiejar
    import requests
    ​
    #登录后才能访问的网站
    auth_url = 'http://jsnu.fuyunweb.com/manage/admin/pt_login.aspx'
    post_url = 'http://jsnu.fuyunweb.com/manage/admin/admin_pt_main.aspx'
    ​
    data = {
            "action":"login",
            "uid":"用户名",
            "pass":"密码"
            }
    ​
    post_data=urllib.parse.urlencode(data).encode(encoding='UTF8')
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'}
    ​
    # 声明一个CookieJar对象实例来保存cookie
    cookie = cookiejar.CookieJar()
    # 利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandler
    handler=request.HTTPCookieProcessor(cookie)
    # 通过CookieHandler创建opener
    opener = request.build_opener(handler)
    # 获取cookie
    req = request.Request(auth_url,post_data,headers)
    resp=opener.open(req)
    print(resp.info()['set-cookie'])
    # 自动带着cookie信息访问登录后的页面 
    resp2=opener.open(post_url)
    print(resp2.info()) #返回响应包中响应头顶的信息,不包活html页面的内容
    #显示登录的页面结果
    print(resp2.read())

     

     
     
    对于info()和read()的返回结果我们通过输出结果来加深一下印象。
    实际的响应包如下:
     
     
     
     
    两个函数的的响应包分别来看一下:
    • info():


     
    • read()
     
     



    三、selenium模拟登陆

     
    Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla FirefoxSafariGoogle ChromeOpera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成.NetJavaPerl等不同语言的测试脚本。
     

    3.1.常见的函数使用

    selenium.webdriver支持各种浏览器,包括谷歌、火狐、IE等浏览器,这里主要使用谷歌,不同浏览器操作区别不太。常用的几个函数包如下
    from selenium import webdriver #基础模块应用,用来创建浏览器对象,操作浏览器
    from selenium.common.exceptions import TimeoutException #异常处理
    from selenium.webdriver.support.ui import WebDriverWait # 设置等待浏览器加载

     

     

    3.2.html中的定位元素

    html中的元素定位上面都准备好了之后,只要熟悉了html的定位就可以很好的进行模拟登陆了。元素查找分为以下几类:
    (1)find_element_by_name------通过它的name属性单位到这个元素
    (2)find_element_by_id--------通过它的id属性单位到这个元素。
    (3)find_element_by_xpath-----如果一个元素它既没有id、name、class属性也不是超链接,这么办呢?或者说它的属性很多重复的。这个时候就可以用xpath解决
    (4)find_element_by_link_text--通过link超链接属性定位
    (5)find_element_by_partial_link_text-有时候一个超链接它的字符串可能比较长,如果输入全称的话,会显示很长,这时候可以用一模糊匹配方式,截取其中一部分字符串就可以了
    (6)find_element_by_tag_name---每个元素都有tag(标签)属性
    (7)find_element_by_class_name-通过它的class属性定位到这个元素
    (8)find_element_by_css_selector

     

     
     

    1.find_element_by_id--定位id属性

    以百度搜索 框为例,id属性由浏览器-->F12寻找搜索框的id属性得来。如下:
     
     
     
     
    其他类似的属性:
     
     
     
     
    link属性按钮比如hao123
     
     
    from selenium import webdriver
    from time import sleep
    driver = webdriver.Chrome()
    driver.get('https://www.baidu.com/')
    # 通过id属性定位百度搜索框,并输入“python”
    driver.find_element_by_id("kw").send_keys("python")
    # 通过name属性定位百度搜索框,并输入“python”--->可能会产生报错,主要是由于name属性不唯一
    dirver.find_element_by_name("wd").send_keys("python")
    # 通过class属性定位百度搜索框,并输入“python”
    driver.find_element_by_class_name("s_ipt").send_keys("python")
    # 从上面定位到的元素属性中,可以看到每个元素都有tag(标签)属性,如搜索框的标签属性,就是最前面的input-->直接运行是会报错的
    driver.find_element_by_tag_name("input").send_keys("python")
    # 通过link(超链接)属性定位hao123按钮,并点击
    driver.find_element_by_link_text("hao123").click()
    # 有时候一个超链接它的字符串可能比较长,如果输入全称的话,会显示很长,这时候可以用一模糊匹配方式,截取其中一部分字符串就可以了
    #partial_link是一种模糊匹配的方式,对于超长字符中的一段进行匹配
    driver.find_element_by_partial_link_text("ao123").click()
    # 通过xpath语法进行定位
    driver.find_element_by_xpath('//*[@id="kw"]').send_keys("python")

     

     
    find_element_by_xpath()------以上定位方式都是通过元素的某个属性来定位的,如果一个元素它既没有id、name、class属性也不是超链接,这么办呢?或者说它的属性很多重复的。这个时候就可以用xpath解决
    使用方法:chrome应用商店下载xpath helper插件,该插件在安装后,打开某个网页 拷贝目标页面元素的XPATH,如下图所示。copy的结果为:
    //*[@id="kw"]/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1]/input

    selenium模拟登陆的代码如下:
    find_element_by_css_selector中的元素我 们可以在chrome中右边copy selector选择得出,具体如下图所示:
     
     
     
    #方式三:selenium模拟登录
    from selenium import webdriver
    from time import sleep
    driver = webdriver.Chrome()
    driver.get('http://jsnu.fuyunweb.com/login2.html')
    sleep(2)
    driver.find_element_by_name("user").send_keys("用户名")
    driver.find_element_by_name("passwordLogin").send_keys("密码")
    sleep(2)
    # find_element_by_css_selector中的元素在chrome中可以通过右键copy selector 进行选择
    driver.find_element_by_css_selector("body > div.login2.log > div > div.loginbtn > button").click()#登录点击模拟

     

    自动输入用户名和密码进行登录
     
     
     
     


    四.socket模拟登陆

    什么是Socket?
    Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
    # 方式四:socket编程
    import socket
    from urllib.parse import urlparse
    
    url = urlparse('http://XXX/login2.html')#登录界面
    host = url.netloc        #获取url中的host
    path = url.path #获取url后面的路径
    #data为抓到的响应包
    data = '''
    POST /manage/admin/pt_login.aspx HTTP/1.1
    Host: jsnu.fuyunweb.com
    Content-Length: 40
    Accept: */*
    X-Requested-With: XMLHttpRequest
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    Origin: http://XXX
    Referer: http:/XXX/login2.html
    Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
    Cookie: ASP.NET_SessionId=2fwb5pydk0htjy45nanudauf; userinfo=userid=ZTxan6d5Aja4AMMDe5yu&uid=pCRUyMSkr5XlOxie3ganHRdIJ7fQDe5yuDe5yu&pass=837A6C7DDD08D1629D0F1394190687EE&schoolid=7YTECdKVMaQDe5yu&cookid=9f729e29-a4d2-4b39-8bbc-068e2c7ab644
    Connection: close
    
    action=login&uid=用户名&pass=密码
    '''
    # 建立socke连接,如果是https请求需要使用ssl,例如:ssl.wrap_socket(socket.socket())
    # ssl是专门用来处理https的模块,我们使用该模块的wrap_socket函数生成一个SSLSocket对象,使用前需要使用import进行导入
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((host,80))        #建立连接
    sock.send(data.format(path, host).encode("utf-8"))        #发送数据
    #recv_data = sock.recv(8192) #可以直接获取响应包的数据,以下循环纯属是用来对响应包格式进行一个规范的没有什么意义
    recv_data = b""
    while True:
        d = sock.recv(1024)
        if d:
            recv_data += d
        else:
            break
    recv_data = recv_data.decode("utf-8")
    print(recv_data)
    sock.close()

     

     
    输出结果如下:
    HTTP/1.1 200 OK
    Cache-Control: private
    Content-Length: 91
    Content-Type: text/html; charset=utf-8
    Server: Microsoft-IIS/8.0
    X-AspNet-Version: 2.0.50727
    Set-Cookie: userinfo=; expires=Sat, 12-Dec-2020 07:55:03 GMT; path=/
    Set-Cookie: userinfo=userid=ZTxan6d5Aja4AMMDe5yu&uid=pCRUyMSkr5XlOxie3ganHRdIJ7fQDe5yuDe5yu&pass=837A6C7DDD08D1629D0F1394190687EE&schoolid=7YTECdKVMaQDe5yu&cookid=be8bf64b-430a-400c-b735-bd11ce65c6cc; domain=jsnu.fuyunweb.com; expires=Sat, 02-Jan-2021 07:55:03 GMT; path=/; HttpOnly
    X-Powered-By: ASP.NET
    Date: Sun, 13 Dec 2020 07:55:02 GMT
    Connection: close
    
    success<[        DISCUZ_CODE_2        ]gt;/manage/admin/admin_pt_main.aspx<[        DISCUZ_CODE_2        ]gt;/manage/admin/admin_pt_order_mydbgd.aspx

     

     


    socket拓展:

     
    Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
    socket又称为套接字,可以将其分为多种:
    1.基于文件类型的套接字:AF_UNIX unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信
    2.基于网络类型的套接字:AF_INET/6 还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现,所有地址家族中,AF_INET是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_INET
     
     
    一个生活中的场景。你要打电话给一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了。等交流结束,挂断电话结束此次交谈。 生活中的场景就解释了这工作原理。
    服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。
    客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。
    # 获取tcp/ip套接字
    tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    ​
    # 获取udp/ip套接字
    udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    ​
    # 由于 socket 模块中有太多的属性。我们在这里破例使用了'from module import *'语句。使用 'from socket import *',我们就把 socket 模块里的所有属性都带到我们的命名空间里了,这样能 大幅减短我们的代码。
    # 例如tcpSock = socket(AF_INET, SOCK_STREAM)
    ​
    '''
    # 涉及到的参数
    AF_UNIX : 文件类型的套接字
    AF_INET/6 :网络类型的套接字
    SOCK_STREAM:提供面向连接的稳定数据传输,即TCP协议
    SOCK_DGRAM :是基于UDP的,专门用于局域网
    protocal : 协议默认为0填写的就是tcp协议
    '''
    ​
    # 服务端套接字函数
    s.bind()    绑定(主机,端口号)到套接字
    s.listen()  开始TCP监听,半连接池可以指定等待数量
    s.accept()  被动接受TCP客户的连接,(阻塞式)等待连接的到来
    ​
    # 客户端套接字函数
    ​
    ​
    s.connect()     主动初始化TCP服务器连接
    s.connect_ex()  connect()函数的扩展版本,出错时返回出错码,而不是抛出异常
    ​
    # 公共用途的套接字函数
    s.recv()            接收TCP数据
    s.send()            发送TCP数据(send在待发送数据量大于己端缓存区剩余空间时,数据丢失,不会发完)
    s.sendall()         发送完整的TCP数据(本质就是循环调用send,sendall在待发送数据量大于己端缓存区剩余空间时,数据不丢失,循环调用send直到发完)
    s.recvfrom()        接收UDP数据
    s.sendto()          发送UDP数据
    s.getpeername()     连接到当前套接字的远端的地址
    s.getsockname()     当前套接字的地址
    s.getsockopt()      返回指定套接字的参数
    s.setsockopt()      设置指定套接字的参数
    s.close()           关闭套接字
    ​
    # 面向锁的套接字方法
    s.setblocking()     设置套接字的阻塞与非阻塞模式
    s.settimeout()      设置阻塞套接字操作的超时时间
    s.gettimeout()      得到阻塞套接字操作的超时时间
    ​
    # 面向文件的套接字的函数
    s.fileno()          套接字的文件描述符
    s.makefile()        创建一个与该套接字相关的文件
    

     

     

    PS:一些用户名和密码比较涉及隐私,就码掉了,调用函数这自行添加啊!

    后记:
    洗漱完了,想着模拟登陆的今天恰好写了一点,所以就想着先把日记搬过来再睡吧!此刻,日记结束,睡觉!晚安!
    今天看见一句话,不是很懂,但还是记录一下吧,语句如下:
    你的时间有限,所以不要浪费时间去过别人的生活。



     
    展开全文
  • 模拟操作UI界面:。多线程程序要具备处理多个任务的能力是必须的,但不一定是要同时,像我们操作UI界面时,虽然可以同时进行,但非常容易出错误,这个时候我们就让...分析实现:YY语音客户端多线程模拟登陆。@olcs。
  • 主要介绍了基于WebClient实现Http协议的Post与Get对网站进行模拟登陆和浏览的方法,以实例形式详细分析了WebClient模拟POST与GET登陆与浏览的过程,对于C#项目开发来说具有不错的参考借鉴价值,需要的朋友可以参考下
  • python模拟登陆的几种方法 客户端向服务器发送请求,cookie则是表明我们身份的标志。而“访问登录后才能看到的页面”这一行为,恰恰需要客户端向服务器证明:“我是刚才登录过的那个客户端”。于是就需要cookie来...
  • 最简单的方法就是通过得到的cookie定制一个httpclient,感兴趣的朋友可以了解下本
  • 也是自己学习python,网上模拟登陆的代码很多都是py2.7版本,最新的py3+版本更改了函数名也摒弃了2.x版本的一些方法,现在根据修改,成功实现py3微博模拟登陆,并加了自己学习注释,希望大家共同进步。里面更改自己...
  • selenium 实战模拟登陆

    千次阅读 多人点赞 2022-03-26 18:03:02
    # 释放动作链 action.release().perform() sleep(1) 以上就是实现模拟登陆的代码,接下来实现爬取火车票数据,大致步骤如图 需要注意的是,我们在传递出发地址之后,需要模拟点击搜索的第一个地址(目的地同理) ...
  • java模拟cookie登陆操作

    2020-09-01 23:02:12
    主要为大家详细介绍了java模拟cookie登陆操作,模拟登陆,取得cookie以记录身份,下次请求时发送cookie以表明身份,感兴趣的小伙伴们可以参考一下
  • 脚本的主要工作是模拟了浏览器登录,解析“已买到的宝贝”页面以获得指定的订单及宝贝信息。 使用方法见代码或执行命令加参数-h,另外需要BeautifulSoup4支持,BeautifulSoup的官方项目列表页:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 54,869
精华内容 21,947
关键字:

方法 模拟登陆