在python中使用Selenium / chromedriver发布Instagram故事

时间:2019-07-02 17:42:44

标签: python selenium selenium-chromedriver instagram bots

我想创建一个使用文件夹路径并将其所有img内容使用python和chromedriver发布到instagram用户故事的机器人(我已经有很多其他功能可以使用此设置工作,所以我希望使用这些工具解决此问题)。如果有人创建或发现了与我描述的内容类似的内容,请对链接进行评论。

我尝试对chromedriver使用移动仿真模式,但取得了一些成功。我能够进入文件选择屏幕,但是当我返回到instagram时,它不再进行移动仿真并锁定了UI(它要求旋转设备)。我包括了当前为我使用的Webdriver选择的选项。我还包括了用于将文件上传到故事的def。

    def __init__ (self, username, password, actionstring, inspoaccounts, 
    inspohashtags) :
        self.username = username
        self.password = password
        self.actionString = str(actionstring)
        self.inspoAccounts = (str(inspoaccounts).split('|', 30))
        self.inspoHashtags = (str(inspohashtags).split('|', 30))
        cOptions = Options()
        cOptions.add_argument("--incognito")
        cOptions.add_argument("--start-maximized")
        cOptions.add_argument('--user-agent="Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 640 XL LTE) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Mobile Safari/537.36 Edge/12.10166"')
        self.driver = webdriver.Chrome(executable_path="venv/Lib/chromedriver_win32/chromedriver.exe", options=cOptions)
        self.driver.delete_all_cookies()
    def uploadStory(self, path):
        path = self.cleanPath(path)
        actions = ActionChains(self.driver)
        element = self.driver.find_element_by_css_selector(
            '#react-root > section > main > section > div.zGtbP > div > div > div > div:nth-child(1) > button')

        #THIS IS WHERE IT ASKS ME TO ROTATE MY DEVICE

        actions.move_to_element(element)
        actions.click()
        actions.perform()
        time.sleep(random.randint(3, 6))
        autoit.win_activate("Open")
        time.sleep(random.randint(4, 6))
        autoit.control_send("Open", "Edit1", path)
        time.sleep(random.randint(3, 7))
        autoit.control_send("Open", "Edit1", "{ENTER}")
        time.sleep(random.randint(3, 6))
        self.driver.find_element_by_xpath("//*[@id=\"react-root\"]/section/footer/div/div/button").click()

如果有人有任何想法或项目,请随时发表评论。没有错误的答案

2 个答案:

答案 0 :(得分:0)

您可以使用https://github.com/instagrambot/instapy-cli上传故事。它完成了基本工作,没有标签,主题标签等:

from instapy_cli import client
with client(user, passw) as cli:
    result = cli.upload(img_path, story=True)

其他可能性可能涉及:

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

driver.set_window_size(width, height)

chrome_options = Options()
useragent = "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Mobile Safari/537.36"
chrome_options.add_argument(f"user-agent={useragent}")

chrome_options.add_experimental_option("mobileEmulation", {"deviceName":"Galaxy S5"}) #or whatever
driver = webdriver.Chrome(options=chrome_options)

答案 1 :(得分:-1)

我目前正在使用chrome上的移动仿真器,但使用的是c#,我的代码在下面用于启用移动仿真,并且可以正常工作,并在整个测试套件中始终保持在移动仿真中。以下是我的参考代码,希望对您有帮助

IWebDriver driver;
ChromeOptions option = new ChromeOptions();
option.AddArguments("--use-fake-ui-for-media-stream"); //Incase you prefer to use webcam to click photoswebcam
option.EnableMobileEmulation(deviceName); // try this option to launch mobile emulator replace devicename with deside device model name. it should be same as listed in chrome.
driver = new ChromeDriver(option);

请让我知道是否需要任何澄清。我知道它不是python的,但可以作为参考。