#-*- coding:utf-8 -*- from selenium import webdriver import time import os import random from selenium.webdriver.common.action_chains import ActionChains browser = 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 + 1 moreTag.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 // 6 print(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)