[python爬虫類]selenium+PhantomJSシミュレーションログイン

2831 ワード

selenium+PhantomJSで爬虫類を作るとブラウザの操作を完全にシミュレートでき、バックグラウンドの通信を避けることができ、プロセスが簡単になり、多くのweb自動化テストもseleniumで行われていますが、このような欠点は遅いことで、実行中に深く感じられます.
今日もホタテに登録した単語をシミュレートし、ある分類で人気グループのメンバーが最もコレクションした単語書を取得しました.例えば、アイエルツ側の単語書の推薦が必要な場合は、コードを実行すると最も人気のあるいくつかの本を得ることができます.(ホタテの単語は分類して単語本を検索できますが、まだヒット順に並べ替えられていないようです)
注意しなければならないのはphantomjs.exeは私たちのコードの同級ディレクトリの下に置かれています.これらのseleniumの基本的な操作は、classやxpathを通じてWebページの要素を見つけたり、値を入力したり、ボタンをクリックしたりするなど、簡単です.つまり、ブラウザを操作している完全なシミュレータです.
コードを直接配置:
# -*- coding: utf-8 -*-
"""
Created on Mon May 16 16:38:00 2016

@author: DJ
"""

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import time
from selenium import webdriver

driver =webdriver.PhantomJS(executable_path="phantomjs.exe")
driver.get("https://www.shanbay.com/accounts/login/")
elem_user = driver.find_element_by_xpath('//*[@id="id_username"]') 
elem_user.send_keys('   ')
elem_pwd = driver.find_element_by_xpath('//*[@id="id_password"]')
elem_pwd.send_keys('  ')
elem_sub = driver.find_element_by_xpath('//*[@id="loginform"]/div[3]/button')
elem_sub.click()

time.sleep(1)
driver.get("https://www.shanbay.com/team/team/")
elem_keyword = driver.find_element_by_xpath('//*[@id="group-form"]/div/input')
elem_keyword.send_keys(u'  ')
elem_button = driver.find_element_by_xpath('//*[@id="group-form"]/div/button')
elem_button.click()
time.sleep(1)
teams=[]
for team in driver.find_elements_by_class_name('title'):
    if team.get_attribute("href")!=None:
        teams.append(team.get_attribute("href"))
members=[]
for team in teams[:5]:
    driver.get(team)
    for i in range(10):
        member=driver.find_element_by_xpath('//*[@id="team_rank_table"]/tbody/tr['+str(i+1)+']/td[2]/a')
        members.append(member.get_attribute('href'))
bookdic={}
for member in members:
    driver.get(member)
    bookurl=driver.find_element_by_xpath('//*[@id="my-wordbooks-heading"]/h3/small/a')
    bookurl.click()
    time.sleep(1)
    books=driver.find_elements_by_class_name('wordbook-title')
    for book in books:
        title=book.get_attribute('title')
        if title in bookdic:
            bookdic[title]=bookdic[title]+1
        else:
            bookdic[title]=1
retbook=sorted(bookdic.iteritems(), key=lambda d:d[1], reverse = True ) 
for i in range(5):
    print retbook[i][0]
driver.close()
コードで検索されたキーワードはアイエルツで、得られた結果は次のとおりです.
50日征服雅思语汇IELTS精选词表雅思聴力语汇王陆807大学英语六级词汇书雅思基本语汇——呉建业
OK、機能実現.
しかし、4位は6級の語彙だった.アイエルツグループのメンバーが所蔵している単語の本を登っただけなので、このような方法は正確ではないに違いない.ホタテの単语は个人情报が少ないので、他の方法で评価するとは思いませんでしたが、结果的にはかなり参考になりました.そして、やはりみんな6级から来ているのですね.の