gpt4 book ai didi

python - 使用 Selenium 不使用 API 将图像发布(上传)到 Instagram

转载 作者:行者123 更新时间:2023-12-05 02:14:56 26 4
gpt4 key购买 nike

背景:

我一直在努力解决这个问题。我正在使用 Selenium (chrome webdriver) 从桌面访问 Instagram 的移动版本。我的目标是创建一个脚本来自动将图像发布到帐户。使用 Python,我已将所有内容自动化,直到我需要选择文件的部分。

问题:

单击“创建新帖子”按钮后,GUI 文件选择器将打开,但我不知道如何与其交互以选择文件。

尝试过:

post_btn.send_keys(r'/Path/To/image.jpg')

post_btn.send_keys('/Path/To/image.jpg')

我认为这种方法的问题是没有输入字段来将字符串发送到。

我阅读了一些其他关于使用 autoit 的帖子,但我使用的是 Mac。

这是发布按钮所在的跨度:

<span class="glyphsSpriteNew_post__outline__24__grey_9 u-__7" aria-label="New Post"></span>

问题:

有没有办法使用 python 通过文件选择器 gui“打开”(上传)文件?更好的是,我可以完全绕过打开文件选择器吗?

谢谢!

编辑:

我认为阻止我解决这个问题的原因是我不了解数据是如何发送和接收的。因为它不是 html 输入是否意味着它是 JSON?我如何弄清楚数据(图像)是如何发送到下一页 ( https://www.instagram.com/create/style/ ) 的?

最佳答案

IDK 如果这对你有用,因为它已经很久了。但是对于任何需要它的人来说,这里是完整的教程,

导入:

import os
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.chrome.options import Options
import autoit
import time
from selenium.webdriver.common.keys import Keys

所以首先你需要一个模拟器。我发现最好的方法是使用 chromedriver.exe,如果您使用 chrome 作为浏览器,您已经需要它。因此,要制作模拟器,您需要为驱动程序编写这段代码:

mobile_emulation = {
"deviceMetrics": { "width": 360, "height": 640, "pixelRatio": 3.0 },
"userAgent": "Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 5 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19" }
chrome_options = Options()
chrome_options.add_experimental_option("mobileEmulation", mobile_emulation)

driver = webdriver.Chrome(chrome_options = chrome_options)

然后你登录:

driver.get('https://www.instagram.com/accounts/login/')

time.sleep(2)
driver.find_element_by_name("username").send_keys("Your Username")
driver.find_element_by_name("password").send_keys("Your Password")
driver.find_element_by_xpath("""//*[@id="react-root"]/section/main/article/div/div/div/form/div[7]/button""").click()

time.sleep(2)

driver.get('https://www.instagram.com/' + username)

命名你的文件(它需要是全名):

ImagePath = 'Your File Location'

最后一步是这样的:

ActionChains(driver).move_to_element( driver.find_element_by_xpath("""//*[@id="react-root"]/section/nav[2]/div/div/div[2]/div/div/div[3]""")).click().perform()
handle = "[CLASS:#32770; TITLE:Open]"
autoit.win_wait(handle, 3)
autoit.control_set_text(handle, "Edit1", dir_path)
autoit.control_click(handle, "Button1")

time.sleep(2)

driver.find_element_by_xpath("""//*[@id="react-root"]/section/div[1]/header/div/div[2]/button""").click()

time.sleep(2)

txt = driver.find_element_by_class_name('_472V_')
txt.send_keys('')
txt = driver.find_element_by_class_name('_472V_')
txt.send_keys('test') # Descrition
txt.send_keys(Keys.ENTER)

driver.find_element_by_xpath("""//*[@id="react-root"]/section/div[1]/header/div/div[2]/button""").click()

所有这一切只是转到上传页面并使用 autoit 在窗口中导航以选择文件并进行选择。然后只需添加描述并分享帖子即可。

关于python - 使用 Selenium 不使用 API 将图像发布(上传)到 Instagram,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52864531/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com