单击取消单击后硒滚动

时间:2019-08-27 19:57:21

标签: python selenium

使用开放源代码自动更新程序更新了Selenium脚本,我将发布社交网络,用户名和密码,因为很难理解现实生活中发生了什么,编辑了一些代码卷轴,结果仍然只有最初发布后才相同。

我唯一想做的就是单击“赞”按钮 a.find_element_by_css_selector(“ span#like-button.btn.btn-default.stat-item”) 并继续模仿,每个类似的按钮都有相同的属性

社交网络hiall.app 用户名-whatl0ol 密码-tornike123

尝试更新源,将发布结果

源代码

from selenium import webdriver
from selenium.common import exceptions
from selenium.webdriver.chrome.options import Options


class FacebookBot:
    def __init__(self,username,password,status_report=False):
        self.username = username
        self.password = password

        self.status_report = status_report

        options = Options()
        options.add_argument("--disable-notifications")

        if self.status_report: print("Opening chromedriver...")
        self.wd = webdriver.Chrome(chrome_options=options)
        if self.status_report: print("Logging in...")
        self.login()

    def login(self):
        self.wd.get("https://hiall.app")
        self.wd.find_element_by_name("username").send_keys(self.username)
        self.wd.find_element_by_name("password").send_keys(self.password)
        self.wd.find_element_by_css_selector("button.btn.btn-main").click()

    def convert_to_int(self,string):
        try:
            return int(string)
        except ValueError:
            if string.lower().endswith("k"):
                string = string[:-2]
                try:
                    return int(float(string)*1000)
                except ValueError:
                    return int(string)*1000

    def get_posts(self):
        articles = self.wd.find_elements_by_css_selector("span#like-button.btn.btn-default.stat-item")
        data = []
        for a in articles:
            if a.get_attribute("id").startswith("span#like-button.btn.btn-default.stat-item"):
                likeIts = [i.get_attribute("aria-label").split() for i in a.find_elements_by_css_selector("span#like-button.btn.btn-default.stat-item") if i.get_attribute("aria-label")]
                likes = {"Like":0,"Love":0,"Haha":0,"Wow":0,"Sad":0,"Angry":0}
                likes.update({i[1]: self.convert_to_int(i[0]) for i in likeIts})
                try:
                    button = a.find_element_by_css_selector("span#like-button.btn.btn-default.stat-item")
                except exceptions.NoSuchElementException:
                    continue
                data.append({"likes":likes,"button":button,"article":a})
        return data

    def scroll(self,page_end=100):
        find_elem = None
        scroll_from = 0
        scroll_limit = self.wd.execute_script("return document.body.scrollHeight")
        i = 0
        while not find_elem:
            self.wd.execute_script("window.scrollTo(%d, %d);" % (scroll_from, scroll_from + scroll_limit))
            scroll_from += scroll_limit
            i += 1
            if page_end and i >= page_end:
                break
            try:
                find_elem = self.wd.find_element_by_css_selector("span#like-button.btn.btn-default.stat-item")
                find_elem.click()
            except exceptions.ElementNotVisibleException:
                find_elem = None
            except exceptions.NoSuchElementException:
                find_elem = None

    def automate(self,unlike=False,page_end=100):
        if self.status_report: print("Forcing Facebook to load the posts...")
        self.scroll(page_end)
        if self.status_report: print("Scrolled down %s times" % page_end)
        if self.status_report: print("%s posts..." % ("Unliking" if unlike else "Liking"))
        self.wd.execute_script("window.scrollTo(0,0);")
        posts = self.get_posts()
        num = 0
        for p in posts:
            if p["likes"]["Angry"] == 0 and p["likes"]["Sad"] == 0 and p["likes"]["Like"] >= 5:
                article = p["article"]
                self.wd.execute_script("arguments[0].scrollIntoView();", article)
                button = article.find_element_by_css_selector("span#like-button.btn.btn-default.stat-item")
                if true: 
                #button.get_attribute("aria-pressed") == ("true" if unlike else "false"):
                    num += 1
                    self.wd.execute_script("arguments[0].click();",button)
                    try:
                        p = article.find_element_by_tag_name("p").get_attribute("innerText")
                        p = p.replace("\n"," ").encode().decode("utf-8")
                    except exceptions.NoSuchElementException:
                        p = ""
                    except:
                        p = ""
                    if self.status_report: print(' - %s "%s"' % ("Unliked" if unlike else "Liked",p))
        if self.status_report: print("%s %s posts" % ("Unliked" if unlike else "Liked",num))

    def close(self):
        self.wd.close()


username = "whatl0ol"
password = "tornike123"

pages = False
while pages is False:
    inp = input("How many pages to go through? (default 100, 'all' for whole News Feed): ")
    if inp.isdigit():
        pages = int(inp)
    elif inp == "all":
        pages = None

unlike = None
while unlike is None:
    inp = input("Do you want to Like (l) or Unlike (u) posts? ")
    if inp == "l":
        unlike = False
    elif inp == "u":
        unlike = True

bot = FacebookBot(username,password,status_report=True)

bot.automate(unlike=unlike, page_end=pages)
print("Finished")
print()

input("Return to exit")
try:
    bot.close()
except:
    pass

0 个答案:

没有答案