马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
案例一:自动登录鱼c网站并签到
Ps: 太累了,感觉写得很罗嗦,主要是想尽可能的写全一点,毕竟担心有那种刚学爬虫的小伙伴不懂。但是即使这样,我相信没有学过selenium、xpath的小伙伴可能还是会有点迷茫,但是由于明天还有早八的课(我不是学计算机的,是机械工程),所以就暂时这样吧。谢谢大家,有问题可以随时留言,只要我有时间就会登上fishC看看。
ps:我是第一次写这种分享,写得不清楚或是逻辑很乱,请各位见谅,不要喷我,我相信鱼c的粉丝们都是有爱的人。
一、总体思路分析:
由于我最近刚学习了selenium,然后刚好一直很羡慕别人写的自动签到的功能,所以决定自己也写一个。
首先我们需要确定自己的环境是否正确,即是否安装了selenium库和chrome浏览器以及webdriver这个小插件(如果没有的话,可以自行百度)。
二、登录代码的分析:
下面打开chrome,然后输入鱼c的官网,如下图
接下来,我们需要使用selenium,来获取右上角登录的tag(标签,学过前端的朋友们肯定熟悉),然后通过selenium输入我们的用户名和密码登录。具体实现的代码如下(不要害怕,下面有具体的分析):def login(driver):
url = 'https://fishc.com.cn/forum.php'
driver.get(url)
#测试是否能够返回正确html
# print(driver.page_source)
# #获取输入的tag和登录的按钮
username_tag = driver.find_element_by_id('ls_username')
password_tag = driver.find_element_by_id('ls_password')
button_tag = driver.find_element_by_xpath('//button[@type="submit"]')
#输入用户名和密码
username = input('请输入用户名:')
password = input('请输入密码:')
#向输入框输入
username_tag.send_keys(username)
password_tag.send_keys(password)
#确认登录
button_tag.click()
time.sleep(2)
sign_in(driver)
#测试用的,保存截图,证明登陆成功
# time.sleep(5)
# driver.save_screenshot('fishc.jpg')
这里为大家加上关于如何获取tag标签的思路: 其实selenium已经为我们封装了足够好用的寻找tag的方法, # #获取输入的tag和登录的按钮
username_tag = driver.find_element_by_id('ls_username')
password_tag = driver.find_element_by_id('ls_password')
button_tag = driver.find_element_by_xpath('//button[@type="submit"]')
详细分析A --- 获取标签: 1.关于username_tag标签: 如图:先点击输入框,然后右键检查,即可定位该tag,那么如何获取呢,有很多方法,由于时间原因我就不多说,只说说我采取的方法(本菜最近一直在上课,没什么时间),这里我采取的是方法---find_element_by_id(输入的id),可能有的朋友知道,在html代码里面id是唯一的,所以我们使用by_id可以精准的获取某个标签。
2.关于password_tag标签: 获取方式同上
3.这里特别说一下按钮标签(如图): 我们需要获取这个标签,然后再之后使用selenium点击它,即可实现登录。 这里我采取的是xpath方式,如果有朋友不知道这个库,那么可以去了解一下,这个库也是一个获取的标签的利器(同bs4和re一样牛逼),不了解也没关系,我会大致让你了解一下: button_tag = driver.find_element_by_xpath('//button[@type="submit"]')
如上面的代码: // : 代表了从整个html代码(即网页源码)中去寻找 [] : 代表着你要给这个xpath语法增加点附加条件,比如说:这个标签的属性等等 @ : 代表你要写的附加条件为属性 然后我们看看这个按钮标签的html代码(如下图): 可以看出来: 他标签的名字叫做:button 他有一些属性:type="submit" class="pn vm" tabindex="904" style="width: 75px;" 这些就足够了,我们首先保证xpath从整个代码中去寻找buttoon,即’//button’,鱼c网站肯定不止一个按钮,所以我们需要加点附加条件,即’//button[@type=”submit”]’。 4. 那么如何为获取的username(用户名)和password(密码)输入值呢,这里我们借助了方法send_keys(你需要输入的内容)就可以实现,具体代码如下: #输入用户名和密码
username = input('请输入用户名:')
password = input('请输入密码:')
5. 如何实现鼠标点击功能: 对于button(按钮)的标签,有一个click()的方法,即可实现点击
三、签到分析: 当我们成功登录后(如果不确定,可以把截图的代码注释取消,会自动截图,已证明登录成功),第一个事情就是获取签到的按钮(如下图),然后转到登录的界面: 总体代码如下(具体分析在下面): def sign_in(driver):
#转到签到页面
sign_url = driver.find_element_by_xpath('//li[@id="mn_Nac60"]/a').get_attribute('href') #获取’签到‘按钮的href属性
driver.get(sign_url)
time.sleep(2)
# print(sign_url)
#开始签到
sign_button_tag = driver.find_element_by_id('JD_sign')
sign_button_tag.click()
print('签到成功')
time.sleep(2)
详细分析B --- 如何成功的转到签到页面: #转到签到页面
sign_url = driver.find_element_by_xpath('//li[@id="mn_Nac60"]/a').get_attribute('href') #获取’签到‘按钮的href属性
driver.get(sign_url)
1.首先我们需要找到这个标签: 我们可以知道,这个‘签到’的按钮,名为a标签,在li标签之下,所以有以下代码: driver.find_element_by_xpath('//li[@id="mn_Nac60"]/a') 我们可以从图中看出,这个标签有一个属性为href,这个属性含有签到的网址,我们需要获取这个网址,使用方法(属于获取的标签的方法)get_attribute(属性名字) 获取,如下: 接下来就是使用selenium了,driver.get(url)即可转到这个url所在的网页。
2. 接下来就是获取签到的标签,然后就点击一下,即可完成签到: 万幸的是(主要是写得太累了,哈哈),鱼c网站这个签到的标签,有id,所以非常容易获取,就不分析了,大家如果不太懂selenium,看了前面的分析也应该会懂一些。
|