#-*- coding:utf-8 -*-
from selenium import webdriver
import time
import os
import random
from selenium.webdriver.common.action_chains import ActionChainsbrowser = webdriver.Chrome()# 最大等待加载完的时间
max_loading = 600
# 延时随机n秒执行
wait_time = random.randint(3, 6)"""
注意:要将原来打开的谷歌浏览器关闭干净
"""# 默认情况下selenium打开的是新的chrome,不会使用原有的cookie,如果想不要每次都输入账号、密码、验证码,就做相关设置
profile_dir = 'C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\User Data'
chrome_options = webdriver.ChromeOptions()
# 增加该设置,防止chrome出现:chrome正受到自动测试软件的控制。使得不能继续访问
chrome_options.add_argument('disable-infobars')
chrome_options.add_argument("user-data-dir=" + os.path.abspath(profile_dir))
# 不加载图片 1.加载,2.不加载
prefs = {"profile.managed_default_content_settings.images": 1}
chrome_options.add_experimental_option("prefs", prefs)browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get("https://tieba.baidu.com/")
# browser.maximize_window()
# js = "window.open('http://www.wlzhys.com')"
# browser.execute_script(js)
# browser.quit()
# browser.close()# # 获取更多吧中的元素的高度
# browser.execute_script("var eleDiv = document.getElementById('likeforumwraper');alert(eleDiv.innerHTML)")# 移动鼠标到"查看更多"元素上
checkMore = browser.find_element_by_xpath('//*[@id="moreforum"]/a')
ActionChains(browser).move_to_element(checkMore).perform()# 获取更多吧中的元素的高度
# browser.execute_script("var eleDiv = document.getElementsByClassName('j_panel_content');alert(eleDiv.innerHTML)")# time.sleep(wait_time)# 获取那8个显示出来的吧的链接元素
tags = browser.find_elements_by_class_name('u-f-item')# 遍历它们
for tag in tags:# 获取元素的高度# print(tag.size['height'])# exit()# tagHref = tag.get_attribute("href")# print(tagHref)tag.click()# 直到加载完,最多等待10秒钟browser.implicitly_wait(10)# 获取所有窗口windows = browser.window_handles# 切换到第二个窗口browser.switch_to.window(windows[-1])# 点击签到sign_button = browser.find_element_by_xpath('//*[@id="signstar_wrapper"]/a')# 防止点一次还不够,要点两次的情况# 直到加载完,最多等待10秒钟browser.implicitly_wait(max_loading)time.sleep(wait_time)sign_button.click()sign_button.click()# time.sleep(wait_time)# 关闭当前窗口browser.close()# 切换回最初的窗口browser.switch_to.window(windows[0])# time.sleep(wait_time)# 移动鼠标到"查看更多"元素上
checkMore = browser.find_element_by_xpath('//*[@id="moreforum"]/a')
ActionChains(browser).move_to_element(checkMore).perform()# js获取元素
js = '''//获取目标元素
var EleId = document.getElementById('forumscontainer');
var targetEle = EleId.firstElementChild.firstElementChild
//下拉滚动50像素
targetEle.scrollTop='''# 获取查看更多里的吧的标签,遍历签到
moreTags = browser.find_elements_by_xpath('//*[@id="forumscontainer"]/div/div[1]/a')
# print(len(moreTags))
# exit()
# 每点完6个,上拉一定距离(防止按钮没出现,点不到的情况)
i = 0
for moreTag in moreTags:# 获取元素高度# print(moreTag.size)i = i + 1moreTag.click()# 直到加载完,最多等待10秒钟browser.implicitly_wait(max_loading)# 获取所有窗口windows = browser.window_handles# 切换到第二个窗口browser.switch_to.window(windows[-1])# 点击签到sign_button = browser.find_element_by_xpath('//*[@id="signstar_wrapper"]/a')# 防止点一次还不够,要点两次的情况# 直到加载完,最多等待10秒钟browser.implicitly_wait(max_loading)time.sleep(wait_time)sign_button.click()sign_button.click()# time.sleep(wait_time)# 关闭当前窗口browser.close()# 切换回最初的窗口browser.switch_to.window(windows[0])# 每6个下拉滚动50像素if i % 6 == 0:num = i // 6print(num)# 若除以6是整数,则下拉if isinstance(num, int):browser.execute_script(js + str(num * 50))print(num)# browser.execute_script("var EleId = document.getElementById('forumscontainer');console.log(50)")# print(i)# time.sleep(wait_time)# print(tags)
# print(tags[0])# 恢复为加载图片
prefs = {"profile.managed_default_content_settings.images": 1}
chrome_options.add_experimental_option("prefs", prefs)time.sleep(wait_time)