如何登录一个网站

登录一个没有验证码的网站是很简单的,只需要找到登录的地址,再post它所需要的包即可。

首先就要抓取发送的包。我这里用的是firefox的httpfox插件。



如图就是我在研究刷评论的时候的截图,post方法后面的就是登录网址,而下面窗口的post data就是我们要发送的包。

首先我们需要找到一个正确的登录网址。弹出的窗口是js做的,不好抓取,要是那种用html语言生成的页面,通常都是login结尾的。比如豆瓣就是:

https://www.douban.com/accounts/login

然后查看抓取的包如下:(会有很多包,主要查看的是post以及post前的get)



post包的内容就如上所示了。source为None,redir是登录后去往的地址,form_email就是登录地址了,下面还有密码,以及login字段等等。这里需要注意的是,postdata是个字典,不仅仅要保持value一样,还要保持key一致。每个网站的登录名和密码的key并不都是一致的,login字段如果是乱码,就是中文的‘登录’。

只要把上述字段弄成一个字典,post到登录网址上,就完成了登录过程。因为目前不想用cookies,因此最好redir的value是你想登录的网址,这样一登录就抓下来了目标地址。

比如我登录豆瓣的地址就是:

 self.pwd = {
            'form_email':self.login,
            'form_password':self.password,
            'source':None,
            'redir':self.group_url,
            'remember':'on',
            'login':'登录',
        }
用户名密码地址自己填上就可以了。打开网页最常用的就是urllib2中的open方法,最近偷懒,用requests,很方便,很好用。

首先模拟登录网站,先get一下,表示自己点击了网站。(如果post中有可变内容,通常也是在这一步得到,我会在下一篇文章中详细说明)。

self.jar = cookielib.CookieJar()
self.request = requests.get(self.url, cookies=self.jar)
这里生成了一个空的cookie。豆瓣没有动态验证(偶尔会有验证码),然后我们就可以登录了。

self.request = requests.post(self.url, headers=self.header, cookies=self.request.cookies, data=self.pwd)
这里我简单的伪装了一个header,具体说明看前面的文章。这里的self.request就是redir网址的那个对象,就可以继续分析了。分析方法我前一篇文章也说过了。

有时候会遇到动态验证的网站,其实原理也很简单,我会在下一篇文章中说明。

源代码:https://github.com/gt11799/login_website

——————————————————————

github主页:https://github.com/gt11799 

E-mail:gting405@163.com



好的,以下是一个使用显式等待进行网站登录的示例代码: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 创建浏览器实例 driver = webdriver.Chrome() # 打开登录页面 driver.get("https://example.com/login") # 等待用户名输入框加载完成 username_input = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.NAME, "username")) ) # 输入用户名 username_input.send_keys("your_username") # 等待密码输入框加载完成 password_input = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.NAME, "password")) ) # 输入密码 password_input.send_keys("your_password") # 等待登录按钮加载完成并可点击 login_button = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//button[@type='submit']")) ) # 点击登录按钮 login_button.click() # 等待登录成功后的页面加载完成 WebDriverWait(driver, 10).until( EC.title_contains("Logged In") ) # 登录成功,开始执行其他操作 # ... # 关闭浏览器 driver.quit() ``` 在上面的示例中,我们使用了 `WebDriverWait` 类来等待页面元素加载完成。这个类需要传入两个参数:浏览器实例和等待时间(单位为秒)。然后,我们使用 `expected_conditions` 模块中的一些方法来指定等待条件。例如,`presence_of_element_located` 方法用于等待页面元素出现,`element_to_be_clickable` 方法用于等待页面元素可点击。 注意,这里的等待时间是一个最大值,如果等待条件提前满足,代码会立即执行下一步操作。如果等待时间超时,代码会抛出 `TimeoutException` 异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值