京東網站上,在京東會員首頁,有每日簽到會送京豆;在我的京東-我的京豆頁,有進店簽到領京豆;在我的京豆-流量加油站頁,有簽到領流量。我們用Python來開發寫程序,實現每天自動領京豆和流量。主要用到Python,selenium模塊和 BeautifulSoup模塊。
一、源碼
from bs4 import BeautifulSoup
from selenium import webdriver
import time
browser = webdriver.Firefox()#用火狐瀏覽器
browser.get('http://vip.jd.com/home.html')#打開登錄頁面
browser.find_element_by_link_text('賬戶登錄').click()
browser.find_element_by_id('loginname').send_keys('你的用戶名')
browser.find_element_by_id('nloginpwd').send_keys('密碼')
browser.find_element_by_xpath('//*[@id="loginsubmit"]').click()
time.sleep(1)
try:
browser.find_element_by_class_name('sign-in').click()
print('簽到成功')
except:
print('不能重複簽到,簽到失敗')
#print(browser.current_window_handle)調試程序時查看當前的網頁句柄
browser.get('http://bean.jd.com/myJingBean/list')
time.sleep(1)
#print(browser.current_window_handle)
#handles = browser.window_handles
#print(handles)
soup = BeautifulSoup(browser.page_source)
ylink =soup.find_all(class_ = 's-btn')
#print(ylink)
for link in ylink:
#print(link.get('href'))
browser.get(link.get('href'))#獲得網址並直接打開
time.sleep(1)
browser.find_element_by_link_text('簽到').click()
time.sleep(1)
time.sleep(1)
browser.get('http://datawallet.jd.com/profile.html')
time.sleep(1)
browser.find_element_by_class_name('btn-sign').click()
time.sleep(1)
browser.quit()
二、開發環境的搭建:
安裝Python3(自行搜索安裝,這裡不作介紹);
安裝selenium模塊和 BeautifulSoup模塊
selenium模塊讓Python直接控制瀏覽器,實際點擊鏈接,填寫登錄信息,幾乎就像是有一個人類用戶在與頁面交互。與Requests和BeautifulSoup相比,selenium允許你用高級的多的方式與網頁交互。
安裝方法:pip install selenium;
在Python中調用:from selenium import webdriver
BeautifulSoup模塊的名稱是bs4(表示 BeautifulSoup第4版),用於從HTML頁面(網頁源碼)中提取信息(比正則表達式要好很多)。
安裝方法:在命令行中運行pip install beautifulsoup4;
在Python中調用:from bs4 import BeautifulSoup
3.安裝火狐瀏覽器(自行下載最新版安裝),下載並配置火狐瀏覽器驅動 geckodriver
geckodriver的下載鏈接:https://github.com/mozilla/geckodriver/releases
將下載好的geckodriver解壓後,將geckodriver.exe放在安裝過火狐瀏覽器的目錄下,本機在C:\Program Files (x86)\Mozilla Firefox;
三、需求分析
第一步,打開瀏覽器,進入京東登錄頁面,自動登錄;
第二步,簽到頁點擊簽到;
第三步,進店簽到領京豆欄獲得店鋪的網址,進入相應店鋪點擊簽到;
第四步,進入簽到領流量頁面,點擊簽到領流量。
第一步:
from bs4 import BeautifulSoup
from selenium import webdriver
import time
browser = webdriver.Firefox()#用火狐瀏覽器
browser.get('http://vip.jd.com/home.html')#打開登錄頁面
browser.find_element_by_link_text('賬戶登錄').click()
browser.find_element_by_id('loginname').send_keys('你的用戶名')
browser.find_element_by_id('nloginpwd').send_keys('密碼')
browser.find_element_by_xpath('//*[@id="loginsubmit"]').click()
第二步:
browser.find_element_by_class_name('sign-in').click()
火狐瀏覽器有一個功能很方便,定位頁面元素,鼠標放在要定位的元素上,右鍵單擊,選擇(查看元素),即可看到相應元素的網頁源碼,在相應的 網頁代碼上右鍵單擊-複製-Xpath項可以直接獲得元素的路徑。
2.selenium模塊在頁面中尋找元素的方法browser.find_element_by_...;browser.find_elements_by_...
(此處自行搜索學習)。需要注意的一點是browser.find_elements_by_...返回的是一個列表,不能使用.click()進行點擊。
第三步:
進入我的京東-我的京豆頁面,browser.get('http://bean.jd.com/myJingBean/list');
使用BeautifulSoup模塊讀取當前頁面的網頁源碼,soup = BeautifulSoup(browser.page_source);
通過火狐瀏覽器的查看元素功能,仔細看尋找一下我們要點擊進入的各個店鋪的鏈接代碼,我們發現,總共有9個店鋪,在網頁中的代碼是9個
簽到後的狀態
ylink =soup.find_all(class_ = 's-btn')
#print(ylink)
for link in ylink:
#print(link.get('href'))
browser.get(link.get('href'))#獲得網址並直接打開
time.sleep(1)
browser.find_element_by_link_text('簽到').click()
time.sleep(1)
第四步:
進入我的京東-流量加油站頁面,browser.get('http://datawallet.jd.com/profile.html');
通過查看網頁源代碼,我們通過class name定位元素,browser.find_element_by_class_name('btn-sign').click()。
最後退出瀏覽器。
閱讀更多 虎賁智能機器 的文章