找到正确的输入标签以在 Instagram 上上传图片

finding correct input tag to upload a image on instagram

我正在尝试使用 Python 和 Selenium 将图片上传到 instagram... 我需要模拟 phone 并在输入标签中传递图像,它有效,因为我可以上传个人资料图片,但唯一的问题是,我找不到用于将图像上传到我的正确输入标签喂养。 我找到的唯一一个是用于上传新个人资料照片的那个。

你能帮我找到输入标签吗?

这是我使用的代码:

  def upload(self, image, text):
        driver.get("https://www.instagram.com/")
        #find input field
        upload_btn = driver.find_element(By.XPATH, "needed xpath")
        time.sleep(2)
        #send image
        upload_btn.send_keys("C:\Users\brend\PycharmProjects\ClimateCoinBot\PP2.jpg") #full path of the file which is to be uploaded

如果你能帮助我,那就太好了:)

使用 .send_keys() 方法上传文件的元素通常可以使用以下定位器定位:

upload_btn = driver.find_element(By.XPATH, "//input[@type='file']")

你应该在

之后添加一个等待/延迟
driver.get("https://www.instagram.com/")

之前

upload_btn = driver.find_element(By.XPATH, "needed xpath")

在访问该元素之前使页面完全加载。
所以你的代码可以是这样的:

def upload(self, image, text):
    driver.get("https://www.instagram.com/")
    time.sleep(2)
    #find input field
    upload_btn = driver.find_element(By.XPATH, "//input[@type='file']")
    #send image        
    upload_btn.send_keys("C:\Users\brend\PycharmProjects\ClimateCoinBot\PP2.jpg") 

但建议使用显式等待而不是硬编码暂停。

所以,我正在使用 Selenium 在 instagram 脚本中工作,我遇到了像你一样的麻烦。但我找到了你要找的代码。看一看:

这就是故事(发照片)代码:

<button class="JdY43"> <span class="ctM9u _2dbep " role="link" tabindex="-1" style="width: 56px; height: 56px;">
<img alt="" class="_6q-tv" crossorigin="anonymous" data-testid="user-avatar" draggable="false" src="https://instagram.fgig4-1.fna.fbcdn.net/v/t51.2885-19/s150x150/271673104_907632683286365_8637941351902776951_n.jpg?_nc_ht=instagram.fgig4-.fna.fbcdn.net&amp;_nc_cat=105&amp;_nc_ohc=nZGpq1e3_awAX_pI_zX&amp;edm=AIQHJ4wBAAAA&amp;ccb=7-4&amp;oh=00_AT-nr4lxSToGQqIQCitUKJQhDXaMCePqmSxEy77CzjlTjA&amp;oe=6212095C&amp;_nc_sid=7b02f1"></span>
<div class="XdXBI">Seu story</div> <div class="TiuNS">
<svg aria-label="Ícone de mais" class="_8-yf5 " color="#0095f6" fill="#0095f6" height="16" role="img" viewBox="0 0 24 24" width="16">
<path d="M12.001.504a11.5 11.5 0 1011.5 11.5 11.513 11.513 0 00-11.5-11.5zm5 12.5h-4v4a1 1 0 01-2 0v-4h-4a1 1 0 110-2h4v-4a1 1 0 112 0v4h4a1 1 0 010 2z">
</path></svg></div> 
<form enctype="multipart/form-data" method="POST" role="presentation"><!-- look here -->
<input accept="image/jpeg" class="tb_sK" type="file"></form></button><!-- look here -->

实际上 Instagram 页面具有以下结构: 按钮标签>(很多不重要的东西)>表单>输入>(关闭按钮标签)

这是一种隐藏照片输入的聪明方法。我浪费了太多时间寻找它。

所以,你需要知道:输入标签有4个,如上所列。您可能需要使用类似 XPATH 的 select 它们:

//*[@id="react-root"]/section/main/section/div[1]/div[2]/div/div/div/button/form/input

那,就是第一个问题。第二个是输入的显示属性设置为“none!important”。您可以在控制台中注入 javaScript 来修复它(我这样做了,然后将其转为“内联”)。

但是,我无法从这里继续,因为当我将文件路径发送到输入时,没有任何反应。

因此,如果我不只是发送路径,而是在 send_keys 之后使用“.submit()”,我会收到以下消息:

"This page could not be loaded. 
If cookies are active in your browser or it
is in Private, try enabling cookies or deactivate 
Private Mode and perform the action again."

这就是我所拥有的一切。我可以使用 Selenium + Pyautogui 上传照片,我有一个脚本,当需要单击按钮并设置路径时我会使用它。但如果你在自己的电脑上,它就没用了,如果它是 selected,它会写在其他 windows 中。如果你愿意,我们可以谈谈。虽然我有这个解决方案,但我真的想要一个完整的 selenium 脚本。

我想为您的研究做出贡献,所以如果您回答它对您有用或对您的工作有贡献,我会很高兴,因为我想继续构建我的机器人。 :)