Опубликовать истории Instagram с использованием селена / хромедрайвера в Python - PullRequest
0 голосов
/ 02 июля 2019

Я хочу создать бота, который берет путь к папке и публикует все его содержимое img в истории пользователей instagram с помощью python и chromedriver (у меня уже есть много других функций, работающих с этой настройкой, поэтому я бы предпочелрешить эту проблему с помощью этих инструментов).Если кто-то создал или нашел что-то похожее на то, что я описываю, пожалуйста, прокомментируйте ссылку.

Я попытался использовать режим мобильной эмуляции для chromedriver с некоторым успехом.Я смог добраться до экрана выбора файлов, но когда я вернулся в Instagram, он больше не выполнял мобильную эмуляцию и не заблокировал интерфейс (он просил повернуть устройство).Я включил параметры, которые я выбрал в настоящее время для используемого веб-драйвера.Я также включил определение, которое я использую, чтобы загрузить файл в историю.

    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 голосов
/ 07 июля 2019

Вы можете загрузить историю с помощью 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)
0 голосов
/ 02 июля 2019

В настоящее время я работаю с мобильными эмуляторами на 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, но может помочь в качестве справки.

...