使用Selenium实现Facebook多页面批量自动发帖时的文本输入、图片粘贴问题求助
Selenium实现Facebook多页面批量自动发帖时的文本输入、图片粘贴问题求助
我正在用Selenium开发一个能同时给多个页面批量自动发帖的工具,但碰到了两个头疼的问题,想请教大家:
问题1:文本输入异常
尝试一次性往发帖输入框粘贴或输入整段文本时,每一行都只显示第一个字。比如我要输入:
Hi
How
are you?
实际输入后显示的却是:
H
H
a
目前我只能靠循环调用send_keys()来逐字输入,但这个速度比人工打字还慢,实在不是理想方案。
问题2:图片粘贴失败
我尝试过两种方式往输入框里粘贴图片:一是模拟Ctrl+V(剪贴板里已经有图片),二是直接用send_keys(image),但都没有成功,不知道该怎么正确实现图片粘贴。
以下是我目前的测试代码(还有不少可以优化的地方,先这么写是为了测试功能):
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait import os import time from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.keys import Keys print("navegador") #abre navegador profile = webdriver.FirefoxProfile() profile.set_preference("dom.webnotifications.enabled", False) browser = webdriver.Firefox(options=profile) browser.get('https://www.facebook.com') browser.maximize_window() print("datos") #carga datos arch3 = open("datos.txt", "r") user = [] arch2 = open("grupos.txt", 'r') list = [] for i in arch2.readlines(): list.append(i) arch2.close() for i in arch3.readlines(): user.append(i) arch3.close() print("login") #login login = browser.find_element(By.ID, "email") login.send_keys(user[0]) p = browser.find_element(By.ID, "pass") p.send_keys(user[1]) time.sleep(5) #p.send_keys(Keys.RETURN) try: boton = browser.find_element(By.XPATH, "//*[starts-with (@id, 'u_0_5_')]") boton.click() time.sleep(10) except: print("No Login") time.sleep(25000) print("grupo") #grupo for i in list: grupos = 0 browser.get(i) print("post") #Post time.sleep(20) post = WebDriverWait(browser, 40).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[1]/div/div/div[1]/div/div[3]/div/div/div[1]/div[1]/div[4]/div/div[2]/div/div/div[2]/div[1]/div/div/div/div[1]/div"))) post.click() print("post 1.1") time.sleep(20) post2 = WebDriverWait(browser, 40).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[1]/div/div/div[1]/div/div[4]/div/div/div[1]/div/div[2]/div/div/div/div/div[1]/form/div/div[1]/div/div/div/div[2]/div[1]/div[1]/div[1]/div[1]/div/div/div[1]"))) post2.click() post2.send_keys("Hello World") time.sleep(25000)
另外还有几个代码里的小细节说明:
- 代码中的print语句是用来跟踪代码执行流程的
- 本来想用
send_keys(Keys.RETURN)代替定位登录按钮,但这个操作的成功率只有一半 - 最后的
time.sleep()是用来临时检查XPATH/ID/CLASS等元素定位是否正确 - 有些
time.sleep()是为了适配页面加载速度,之后会换成WebDriverWait来优化
备注:内容来源于stack exchange,提问作者Kaster
相关产品推荐
相关产品推荐

