python+seleniumでテンセントのトップページの今日の話題の内容を自動的に自分のcnblogに発表します
目的:pyhtonの下のunittestユニットを使用してフレームワークをテストし、seleniumのwebdriverと組み合わせてテンセントのトップページの今日の話題の下の内容を自動的に自分のcnblogに発表することを実現する.
構想:QQQDailyTopicクラスを作成してunittestのTestCaseクラスを継承し、setUp()メソッドは実行前の初期化作業をテストし、最後のtearDown()はsetUp()メソッドと呼応し、実行後の善後作業をテストする.
そしてメソッドget_qq_daily_topic_urlはqqトップページの今日の話題のurlを獲得します;
メソッドget_title_and_content_from_qq_daily_topicは今日の話題から後にcnblogの下で新しいblogに必要なタイトルtitleとリッチテキストcontentを獲得し、今日の話題titleテキストと内容のinnerHTMLを抽出します.
方法loginはログイン、要素を位置決めし、usernameとpasswordを入力し、ログインボタンをクリックするために使用されます.
メソッドset_contentは、jsを使用して新しいエッセイを追加したリッチテキストボックスに指定したコンテンツをscecute_を介して挿入するリッチテキストボックスにコンテンツを埋め込むために使用されます.scrit()はjsコードを実行する.
メソッドtest_transpond_qq_daily_topicはcnblogにqqトップページの今日の話題を転送するテストに使用します.有効なユーザー名とパスワードで私のブログに自動的にログインし、新しいエッセイを追加したタイトルとリッチテキストボックスに今日の話題のタイトルと内容を自動的に記入し、最後に発表ボタンをクリックします.unittestの下で「test」で始まる方法が必要です.実装コードは次のとおりです.
次のような効果が得られます.
QQのトップページの今日の話題
cnblogは今日の話題を転送します
一部の内容のスクリーンショット
構想:QQQDailyTopicクラスを作成してunittestのTestCaseクラスを継承し、setUp()メソッドは実行前の初期化作業をテストし、最後のtearDown()はsetUp()メソッドと呼応し、実行後の善後作業をテストする.
そしてメソッドget_qq_daily_topic_urlはqqトップページの今日の話題のurlを獲得します;
メソッドget_title_and_content_from_qq_daily_topicは今日の話題から後にcnblogの下で新しいblogに必要なタイトルtitleとリッチテキストcontentを獲得し、今日の話題titleテキストと内容のinnerHTMLを抽出します.
方法loginはログイン、要素を位置決めし、usernameとpasswordを入力し、ログインボタンをクリックするために使用されます.
メソッドset_contentは、jsを使用して新しいエッセイを追加したリッチテキストボックスに指定したコンテンツをscecute_を介して挿入するリッチテキストボックスにコンテンツを埋め込むために使用されます.scrit()はjsコードを実行する.
メソッドtest_transpond_qq_daily_topicはcnblogにqqトップページの今日の話題を転送するテストに使用します.有効なユーザー名とパスワードで私のブログに自動的にログインし、新しいエッセイを追加したタイトルとリッチテキストボックスに今日の話題のタイトルと内容を自動的に記入し、最後に発表ボタンをクリックします.unittestの下で「test」で始まる方法が必要です.実装コードは次のとおりです.
#coding=utf-8
from selenium import webdriver
import unittest
from time import sleep
class QQDailyTopic(unittest.TestCase):
def setUp(self):
self.dr = webdriver.Firefox()
self.title, self.content = self.get_title_and_content_from_qq_daily_topic()
def get_qq_daily_topic_url(self):
return self.dr.find_element_by_css_selector('#todaytop a').get_attribute('href')
def get_title_and_content_from_qq_daily_topic(self):
self.dr.get('http://www.qq.com/')
url = self.get_qq_daily_topic_url()
self.dr.get(url)
title = self.dr.find_element_by_id('sharetitle').text
content = self.dr.find_element_by_id('articleContent').get_attribute('innerHTML')
return (title, content)
def login(self, username, password):
self.dr.find_element_by_id('input1').send_keys(username)
self.dr.find_element_by_id('input2').send_keys(password)
self.dr.find_element_by_id('signin').click()
# js
def set_content(self, text):
text = text.strip()
js = 'document.getElementById("Editor_Edit_EditorBody_ifr").contentWindow.document.body.innerHTML=\'%s\'' %(text)
print(js)
self.dr.execute_script(js)
def test_transpond_qq_daily_topic(self):
self.dr.get('https://passport.cnblogs.com/user/signin')
self.login('kemi_xxxx', 'kemi_xxxx')#
sleep(3)
self.dr.get('https://i.cnblogs.com/EditPosts.aspx?opt=1')
self.dr.find_element_by_id('Editor_Edit_txbTitle').send_keys(self.title)
self.set_content(self.content)
self.dr.find_element_by_id('Editor_Edit_lkbPost').click()
def tearDown(self):
sleep(5)
self.dr.quit()
if __name__ == '__main__':
unittest.main()
次のような効果が得られます.
QQのトップページの今日の話題
cnblogは今日の話題を転送します
一部の内容のスクリーンショット