PhantomJS是一個基於WebKit的JavaScript API,它使用QtWebKit做爲它核心瀏覽器的功能,使用WebKit來編譯解釋執行JavaScript代碼,任何你能夠在基於WebKit瀏覽器作的事情,它都能作到。Selenium是一個用於Web應用自動化程序測試的工具,可讓瀏覽器自動加載頁面,獲取須要的數據,Selenium本身不帶瀏覽器,因此須要和PhantomJS、FireFox、Chrome等瀏覽器結合。css
1.切換登陸方式html
查找claaa=div.login-tab.login-tab-r的元素,發送click事件,class標籤在selenium中須要使用"元素類型.class1.class2"把空格進行替換。python
2.輸入用戶名密碼並登陸linux
查找id=loginname的元素,調用send_keys輸入用戶名;查找id=nloginpwd的元素,調用send_keys輸入密碼;查找id=loginsubmit的元素,發送click事件。web
3.用戶簽到瀏覽器
打開http://vip.jd.com/home.html頁面,查找id=signIn的元素,發送click事件。併發
4.店內簽到app
打開https://bean.jd.com/myJingBean/list頁面,使用xpath查找//ul[@class='bean-shop-list']/li/a[@class='s-btn']元素,查找href屬性,並打開頁面;在新打開的頁面中查找class=a.d-header-icon.unsigned的元素,併發送click事件。工具
新建jd.py文件測試
#!/usr/bin/env python3 # -*- coding: utf-8 -*- from selenium import webdriver import time import sys import io sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') # 點擊頁面元素 def my_click(browser, type, value): if type == "id": element = browser.find_element_by_id(value) elif type == "name": element = browser.find_element_by_name(value) elif type == "class": element = browser.find_element_by_css_selector(value) else: print("Can't find element") return element.click() time.sleep(3) # 用戶簽到 def my_login(browser): browser.get("https://passport.jd.com/uc/login") time.sleep(3) my_click(browser, "class", "div.login-tab.login-tab-r") loginname = browser.find_element_by_id("loginname") nloginpwd = browser.find_element_by_id("nloginpwd") loginname.send_keys("username") nloginpwd.send_keys("password") my_click(browser, "id", "loginsubmit") print("login success") time.sleep(3) # 把頁面保存爲圖片,驗證是否登陸成功 browser.get_screenshot_as_file("login.png") # 店內簽到 def shop_sign_in(browser): print("店內簽到") browser.get("https://bean.jd.com/myJingBean/list") time.sleep(3) shops = browser.find_elements_by_xpath("//ul[@class='bean-shop-list']/li/a[@class='s-btn']") urls = [s.get_attribute("href") for s in shops] for url in urls: try: browser.get(url) time.sleep(3) my_click(browser, "class", "a.d-header-icon.unsigned") print("%s 簽到成功" % url) except: print("%s 簽到失敗" % url) # 用戶登陸 def user_sign_in(driver): print("用戶簽到") url = "http://vip.jd.com/home.html" driver.get(url) time.sleep(3) my_click(driver, "id", "signIn") print("%s 簽到成功" % url) def main(): browser = webdriver.PhantomJS(executable_path=r"/root/phantomjs-2.1.1-linux-x86_64/bin/phantomjs") # 最大化瀏覽器窗口 browser.maximize_window() my_login(browser) user_sign_in(browser) shop_sign_in(browser) browser.quit() if __name__ == "__main__": main()
環境:Python(3.5.2)
1.下載Phantomjs
地址http://phantomjs.org/download.html
2.運行腳本
root@710bd3e4deb6:~# python3 jd.py
3.登陸https://bean.jd.com/myJingBean/list查看是否簽到成功
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
輸出字符編碼格式錯誤,修改編碼格式
import sys import io sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')