1.先客戶端登上qq。運行代碼,自動登錄
2.循環(點贊,滾動)
感覺沒有c#寫的好,但是比C#簡單。qq空間不太穩定,可能是網絡不行 電信丟包率40%.
運行日誌:
/Users/xiaohuangrenruanjian/PycharmProjects/mytest/venv/bin/python /Users/xiaohuangrenruanjian/PycharmProjects/mytest/test2.py
QQ空間-分享生活,留住感動
點擊登錄:<span id="img_out_345139427" uin="345139427" type="4" class="img_out"></span>
QQ:345139427
waitting login
登錄成功:深愛着你——My wife [http://345139427.qzone.qq.com]
0點贊:<a class="item qz_like_btn_v3 " data-islike="0" data-likecnt="38" data-showcount="20" data-unikey="http://user.qzone.qq.com/3164336637/mood/fdf19bbc7345635ebe400800" data-curkey="http://user.qzone.qq.com/3164336637/mood/fdf19bbc7345635ebe400800" data-clicklog="like" href="javascript:;"><i class="fui-icon icon-op-praise"></i></a>
1點贊:<a class="item qz_like_btn_v3 " data-islike="0" data-likecnt="1" data-showcount="0" data-unikey="http://user.qzone.qq.com/248043945/mood/a9d9c80e28aa605e9f320000" data-curkey="http://user.qzone.qq.com/248043945/mood/a9d9c80e28aa605e9f320000" data-clicklog="like" href="javascript:;"><i class="fui-icon icon-op-praise"></i></a>
2點贊:<a class="item qz_like_btn_v3 " data-islike="0" data-likecnt="0" data-showcount="0" data-unikey="http://user.qzone.qq.com/465169000/mood/68eab91b1318635e0baf0a00" data-curkey="http://user.qzone.qq.com/465169000/mood/68eab91b1318635e0baf0a00" data-clicklog="like" href="javascript:;"><i class="fui-icon icon-op-praise"></i></a>
3點贊:<a class="item qz_like_btn_v3 " data-islike="0" data-likecnt="15" data-showcount="15" data-unikey="http://user.qzone.qq.com/1077205961/photo/V13fNaWL3iPNOX/NRMAVjR0eWRzMFFMcjRZbDQ1NkxVYQcAcGhvdG90ag!!" data-curkey="http://user.qzone.qq.com/1077205961/photo/V13fNaWL3iPNOX/NRMAVjR0eWRzMFFMcjRZbDQ1NkxVYQcAcGhvdG90ag!!" data-clicklog="like" href="javascript:;"><i class="fui-icon icon-op-praise"></i></a>
4點贊:<a class="item qz_like_btn_v3 " data-islike="0" data-likecnt="23" data-showcount="20" data-unikey="http://user.qzone.qq.com/3545658314/mood/ca7356d379f7625e67d40e00" data-curkey="http://user.qzone.qq.com/3545658314/mood/ca7356d379f7625e67d40e00" data-clicklog="like" href="javascript:;"><i class="fui-icon icon-op-praise"></i></a>
5點贊:<a class="item qz_like_btn_v3 " data-islike="0" data-likecnt="11" data-showcount="10" data-unikey="http://user.qzone.qq.com/250393386/mood/2ab3ec0e00d4625e57ad0500" data-curkey="http://user.qzone.qq.com/250393386/mood/2ab3ec0e00d4625e57ad0500" data-clicklog="like" href="javascript:;"><i class="fui-icon icon-op-praise"></i></a>
6點贊:<a class="item qz_like_btn_v3 " data-islike="0" data-likecnt="12" data-showcount="10" data-unikey="http://user.qzone.qq.com/250393386/mood/2ab3ec0edbd3625efac60700" data-curkey="http://user.qzone.qq.com/250393386/mood/2ab3ec0edbd3625efac60700" data-clicklog="like" href="javascript:;"><i class="fui-icon icon-op-praise"></i></a>
7點贊:<a class="item qz_like_btn_v3 " data-islike="0" data-likecnt="0" data-showcount="0" data-unikey="http://kg.qq.com/zhubo/index.html?roomid=659b9f85252f318830" data-curkey="000077814221001583533555" data-clicklog="like" href="javascript:;"><i class="fui-icon icon-op-praise"></i></a>
8點贊:<a class="item qz_like_btn_v3 " data-islike="0" data-likecnt="10" data-showcount="9" data-unikey="http://user.qzone.qq.com/250393386/photo/V113Qwff3KxmAO/NRMAVjR0S3JQc0RyWEhZbDRIMHpZRwcAcGhvdG9neg!!" data-curkey="http://user.qzone.qq.com/250393386/photo/V113Qwff3KxmAO/NRMAVjR0S3JQc0RyWEhZbDRIMHpZRwcAcGhvdG9neg!!" data-clicklog="like" href="javascript:;"><i class="fui-icon icon-op-praise"></i></a>
9點贊:<a class="item qz_like_btn_v3 " data-islike="0" data-likecnt="32" data-showcount="20" data-unikey="http://user.qzone.qq.com/1345963553/mood/21c63950d6be625e996c0900" data-curkey="http://user.qzone.qq.com/1345963553/mood/21c63950d6be625e996c0900" data-clicklog="like" href="javascript:;"><i class="fui-icon icon-op-praise"></i></a>
10點贊:<a class="item qz_like_btn_v3 " data-islike="0" data-likecnt="1" data-showcount="1" data-unikey="http://user.qzone.qq.com/503707720/photo/V12TY9Wq2YLPbQ/NRMAVjR0U1BnRkhuV1RZbDVNLnlNRgcAcGhvdG90ag!!" data-curkey="http://user.qzone.qq.com/503707720/photo/V12TY9Wq2YLPbQ/NRMAVjR0U1BnRkhuV1RZbDVNLnlNRgcAcGhvdG90ag!!" data-clicklog="like" href="javascript:;"><i class="fui-icon icon-op-praise"></i></a>
11點贊:<a class="item qz_like_btn_v3 " data-islike="0" data-likecnt="47" data-showcount="19" data-unikey="http://user.qzone.qq.com/3545658314/mood/ca7356d3a968625e45310900" data-curkey="http://user.qzone.qq.com/3545658314/mood/ca7356d3a968625e45310900" data-clicklog="like" href="javascript:;"><i class="fui-icon icon-op-praise"></i></a>
12點贊:<a class="item qz_like_btn_v3 " data-islike="0" data-likecnt="14" data-showcount="12" data-unikey="http://user.qzone.qq.com/1657488557/mood/ad44cb629067625e783f0100" data-curkey="http://user.qzone.qq.com/1657488557/mood/ad44cb629067625e783f0100" data-clicklog="like" href="javascript:;"><i class="fui-icon icon-op-praise"></i></a>
13點贊:<a class="item qz_like_btn_v3 " data-islike="0" data-likecnt="122" data-showcount="20" data-unikey="http://user.qzone.qq.com/1751080128/mood/c05c5f689546625e53150000" data-curkey="http://user.qzone.qq.com/1751080128/mood/c05c5f689546625e53150000" data-clicklog="like" href="javascript:;"><i class="fui-icon icon-op-praise"></i></a>
14點贊:<a class="item qz_like_btn_v3 " data-islike="0" data-likecnt="51" data-showcount="1" data-unikey="http://user.qzone.qq.com/271858579/mood/933b3410d20e615eb9bb0400" data-curkey="http://user.qzone.qq.com/1503474975/mood/1f359d59d721625ed2460300" data-clicklog="like" href="javascript:;"><i class="fui-icon icon-op-praise"></i></a>
15點贊:<a class="item qz_like_btn_v3 " data-islike="0" data-likecnt="0" data-showcount="0" data-unikey="http://user.qzone.qq.com/502529607/mood/47fef31defe3615e1afc0800" data-curkey="http://user.qzone.qq.com/502529607/mood/47fef31defe3615e1afc0800" data-clicklog="like" href="javascript:;"><i class="fui-icon icon-op-praise"></i></a>
16點贊:<a class="item qz_like_btn_v3 " data-islike="0" data-likecnt="121" data-showcount="20" data-unikey="http://user.qzone.qq.com/1751080128/mood/c05c5f6838d1615e2ecd0800" data-curkey="http://user.qzone.qq.com/1751080128/mood/c05c5f6838d1615e2ecd0800" data-clicklog="like" href="javascript:;"><i class="fui-icon icon-op-praise"></i></a>
17點贊:<a class="item qz_like_btn_v3 " data-islike="0" data-likecnt="10" data-showcount="1" data-unikey="http://user.qzone.qq.com/3545997/mood/8d1b360020ba615e41cb0d00" data-curkey="http://user.qzone.qq.com/3545997/mood/8d1b360020ba615e41cb0d00" data-clicklog="like" href="javascript:;"><i class="fui-icon icon-op-praise"></i></a>
18點贊:<a class="item qz_like_btn_v3 " data-islike="0" data-likecnt="0" data-showcount="0" data-unikey="http://user.qzone.qq.com/3262612927/mood/bf8577c2936d5f5e47a10400" data-curkey="http://user.qzone.qq.com/937577500/mood/1c4ce237a999615e9dc80d00" data-clicklog="like" href="javascript:;"><i class="fui-icon icon-op-praise"></i></a>
19點贊:<a class="item qz_like_btn_v3 " data-islike="0" data-likecnt="42" data-showcount="20" data-unikey="http://user.qzone.qq.com/1206396753/mood/5127e8474198615e88c80100" data-curkey="http://user.qzone.qq.com/1206396753/mood/5127e8474198615e88c80100" data-clicklog="like" href="javascript:;"><i class="fui-icon icon-op-praise"></i></a>
20點贊:<a class="item qz_like_btn_v3 " data-islike="0" data-likecnt="1" data-showcount="1" data-unikey="http://user.qzone.qq.com/2240016440/mood/38f083853391615e6a1e0000" data-curkey="http://user.qzone.qq.com/2240016440/mood/38f083853391615e6a1e0000" data-clicklog="like" href="javascript:;"><i class="fui-icon icon-op-praise"></i></a>
源碼:
# 先客戶端登上qq
import time
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from selenium.webdriver.common.by import By
# driver = webdriver.Safari()
driver = webdriver.Chrome("/Users/xiaohuangrenruanjian/Downloads/chromedriver2")
driver.implicitly_wait(10)
driver.get("https://i.qq.com/")
try:
print(driver.title)
driver.switch_to.frame("login_frame")
span = driver.find_element(By.XPATH, '//*[@id="qlogin_list"]/a[1]')
print('點擊登錄:' + span.get_attribute('outerHTML'))
span.click()
qq = span.get_attribute('uin')
print('QQ:' + span.get_attribute('uin'))
while driver.title == 'QQ空間-分享生活,留住感動':
print('waitting login')
time.sleep(1)
print('登錄成功:' + driver.title)
# element = driver.find_element_by_id('tab_menu_friend')
# print('點擊好友動態:' + element.get_attribute('outerHTML'))
# element.click()
# while True: #是否正在加載
# time.sleep(2)
# try:
# element = driver.find_element_by_css_selector(
# r'img[src:"http://qzonestyle.gtimg.cn/aoi/img/icenter/loading.gif"]')
# except NoSuchElementException:
# break
while True:
# time.sleep(5)
elements = driver.find_elements_by_css_selector('a.item.qz_like_btn_v3[data-clicklog="like"]')
# elements = driver.find_elements_by_css_selector('i.fui-icon.icon-op-praise')
i = 0
for element in elements:
# driver.execute_script("arguments[0].scrollIntoView();", element) # 滾動到元素位可見
print(str(i)+'/'+str(len(elements)) + '點贊:' + element.get_attribute('outerHTML'))
i += 1
driver.execute_script("arguments[0].click();", element)
# element.click()
time.sleep(1)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)") # 滾動到底部
print(driver.page_source)
print("wait end")
time.sleep(10)
except NoSuchElementException:
print("except")
pass
else:
print("else")
finally:
print("end")
driver.close()
優化:使用顯示等待:WebDriverWait(),效果也不好。網絡不行。
# 先客戶端登上qq
import time
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
# driver = webdriver.Safari()
driver = webdriver.Chrome("/Users/xiaohuangrenruanjian/Downloads/chromedriver2")
# driver.implicitly_wait(10)
driver.get("https://i.qq.com/")
# driver.minimize_window()
try:
elements = WebDriverWait(driver, 15).until(expected_conditions.presence_of_all_elements_located((By.ID, 'login_frame')))
print(type(elements))
print(elements)
print(driver.title)
driver.switch_to.frame(elements[0])
elements = WebDriverWait(driver, 15).until(expected_conditions.presence_of_all_elements_located((By.XPATH, '//*[@id="qlogin_list"]/a[1]')))
print(type(elements))
print(elements)
# element = driver.find_element(By.CLASS_NAME, 'img_out')
print('點擊登錄:' + elements[0].get_attribute('outerHTML'))
elements[0].click()
# elements[0].send_keys(Keys.ENTER)
qq = elements[0].get_attribute('uin')
print('QQ:' + elements[0].get_attribute('uin'))
# elements = WebDriverWait(driver, 15).until_not(
# expected_conditions.title_is('QQ空間-分享生活,留住感動'))
# print(type(elements))
# print(elements)
while driver.title == 'QQ空間-分享生活,留住感動':
print('Waiting for login')
time.sleep(1)
print('登錄成功:' + driver.title)
# element = driver.find_element_by_id('tab_menu_friend')
# print('點擊好友動態:' + element.get_attribute('outerHTML'))
# element.click()
# while True: #是否正在加載
# time.sleep(2)
# try:
# element = driver.find_element_by_css_selector(
# r'img[src:"http://qzonestyle.gtimg.cn/aoi/img/icenter/loading.gif"]')
# except NoSuchElementException:
# break
g = 0
while True:
time.sleep(1)
# elements = WebDriverWait(driver, 5).until(
# expected_conditions.presence_of_all_elements_located((By.CSS_SELECTOR, '.a.item.qz_like_btn_v3[data-clicklog="like"]')))
# elements = driver.find_elements_by_css_selector('a.item.qz_like_btn_v3[data-clicklog="cancellike"]')
# print(str(len(elements))+"已贊")
elements = driver.find_elements_by_css_selector('a.item.qz_like_btn_v3[data-clicklog="like"]')
# elements = driver.find_elements_by_css_selector('i.fui-icon.icon-op-praise')
i = 0
for element in elements:
# driver.execute_script("arguments[0].scrollIntoView();", element) # 滾動到元素位可見
i += 1
print(str(i) + '/' + str(len(elements)))
print(str(i) + '/' + str(len(elements)) + '點贊:' + element.get_attribute('outerHTML'))
driver.execute_script("arguments[0].click();", element)
# element.click()
time.sleep(1)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)") # 滾動到底部
g += 1
print('滾動'+str(g))
print(driver.page_source)
print("Waiting for end")
time.sleep(10)
except NoSuchElementException:
print("except")
pass
else:
print("else")
finally:
print("end")
driver.close()
優化2:不顯示圖片,加快速度
# 先客戶端登上qq
import time
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
options = webdriver.ChromeOptions()
prefs = {"profile.default_content_setting_values": {"images": 2}}
options.add_experimental_option("prefs", prefs)
# driver = webdriver.Safari()
driver = webdriver.Chrome("/Users/xiaohuangrenruanjian/Downloads/chromedriver2",chrome_options=options)
# driver.implicitly_wait(10)
driver.get("https://i.qq.com/")
# driver.minimize_window()
try:
elements = WebDriverWait(driver, 15).until(
expected_conditions.presence_of_all_elements_located((By.ID, 'login_frame')))
print(type(elements))
print(elements)
print(driver.title)
driver.switch_to.frame(elements[0])
elements = WebDriverWait(driver, 15).until(
expected_conditions.presence_of_all_elements_located((By.XPATH, '//*[@id="qlogin_list"]/a[1]')))
print(type(elements))
print(elements)
# element = driver.find_element(By.CLASS_NAME, 'img_out')
print('點擊登錄:' + elements[0].get_attribute('outerHTML'))
elements[0].click()
# elements[0].send_keys(Keys.ENTER)
qq = elements[0].get_attribute('uin')
print('QQ:' + elements[0].get_attribute('uin'))
# elements = WebDriverWait(driver, 15).until_not(
# expected_conditions.title_is('QQ空間-分享生活,留住感動'))
# print(type(elements))
# print(elements)
while driver.title == 'QQ空間-分享生活,留住感動':
print('Waiting for login')
time.sleep(1)
print('登錄成功:' + driver.title)
# element = driver.find_element_by_id('tab_menu_friend')
# print('點擊好友動態:' + element.get_attribute('outerHTML'))
# element.click()
# while True: #是否正在加載
# time.sleep(2)
# try:
# element = driver.find_element_by_css_selector(
# r'img[src:"http://qzonestyle.gtimg.cn/aoi/img/icenter/loading.gif"]')
# except NoSuchElementException:
# break
g = 0
while True:
time.sleep(1)
# elements = WebDriverWait(driver, 5).until(
# expected_conditions.presence_of_all_elements_located((By.CSS_SELECTOR, '.a.item.qz_like_btn_v3[data-clicklog="like"]')))
# elements = driver.find_elements_by_css_selector('a.item.qz_like_btn_v3[data-clicklog="cancellike"]')
# print(str(len(elements))+"已贊")
elements = driver.find_elements_by_css_selector('a.item.qz_like_btn_v3[data-clicklog="like"]')
# elements = driver.find_elements_by_css_selector('i.fui-icon.icon-op-praise')
i = 0
for element in elements:
# driver.execute_script("arguments[0].scrollIntoView();", element) # 滾動到元素位可見
i += 1
print(str(i) + '/' + str(len(elements)))
print(str(i) + '/' + str(len(elements)) + '點贊:' + element.get_attribute('outerHTML'))
driver.execute_script("arguments[0].click();", element)
# element.click()
time.sleep(1)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)") # 滾動到底部
g += 1
print('滾動' + str(g))
print(driver.page_source)
print("Waiting for end")
time.sleep(10)
except NoSuchElementException:
print("except")
pass
else:
print("else")
finally:
print("end")
driver.close()
優化4:定時刷新
# 先客戶端登上qq
import time
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
options = webdriver.ChromeOptions()
prefs = {"profile.default_content_setting_values": {"images": 2}}
options.add_experimental_option("prefs", prefs)
# 設置chrome瀏覽器無界面模式
# options.add_argument('--headless')
# driver = webdriver.Safari()
driver = webdriver.Chrome("/Users/xiaohuangrenruanjian/Downloads/chromedriver2", options=options)
# driver.implicitly_wait(10)
driver.get("https://i.qq.com/")
# driver.minimize_window()
try:
elements = WebDriverWait(driver, 15).until(
expected_conditions.presence_of_all_elements_located((By.ID, 'login_frame')))
print(type(elements))
print(elements)
print(driver.title)
driver.switch_to.frame(elements[0])
elements = WebDriverWait(driver, 15).until(
expected_conditions.presence_of_all_elements_located((By.XPATH, '//*[@id="qlogin_list"]/a[1]')))
print(type(elements))
print(elements)
# element = driver.find_element(By.CLASS_NAME, 'img_out')
print('點擊登錄:' + elements[0].get_attribute('outerHTML'))
elements[0].click()
# elements[0].send_keys(Keys.ENTER)
qq = elements[0].get_attribute('uin')
print('QQ:' + elements[0].get_attribute('uin'))
# elements = WebDriverWait(driver, 15).until_not(
# expected_conditions.title_is('QQ空間-分享生活,留住感動'))
# print(type(elements))
# print(elements)
while driver.title == 'QQ空間-分享生活,留住感動':
print('Waiting for login')
time.sleep(1)
print('登錄成功:' + driver.title)
# element = driver.find_element_by_id('tab_menu_friend')
# print('點擊好友動態:' + element.get_attribute('outerHTML'))
# element.click()
# while True: #是否正在加載
# time.sleep(2)
# try:
# element = driver.find_element_by_css_selector(
# r'img[src:"http://qzonestyle.gtimg.cn/aoi/img/icenter/loading.gif"]')
# except NoSuchElementException:
# break
g = 0
while True:
time.sleep(1)
# elements = WebDriverWait(driver, 5).until(
# expected_conditions.presence_of_all_elements_located((By.CSS_SELECTOR, '.a.item.qz_like_btn_v3[data-clicklog="like"]')))
# elements = driver.find_elements_by_css_selector('a.item.qz_like_btn_v3[data-clicklog="cancellike"]')
# print(str(len(elements))+"已贊")
elements = driver.find_elements_by_css_selector('a.item.qz_like_btn_v3[data-clicklog="like"]')
# elements = driver.find_elements_by_css_selector('i.fui-icon.icon-op-praise')
i = 0
for element in elements:
# driver.execute_script("arguments[0].scrollIntoView();", element) # 滾動到元素位可見
i += 1
print(str(i) + '/' + str(len(elements)))
print(str(i) + '/' + str(len(elements)) + '點贊:' + element.get_attribute('outerHTML'))
driver.execute_script("arguments[0].click();", element)
# element.click()
time.sleep(1)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)") # 滾動到底部
g += 1
print('滾動' + str(g))
if g >= 100:
g = 0
driver.refresh()
print(driver.page_source)
print("Waiting for end")
time.sleep(10)
except NoSuchElementException:
print("except")
pass
else:
print("else")
finally:
print("end")
driver.close()