【问题标题】:Selenium script to locate textarea element not working用于定位 textarea 元素的 Selenium 脚本不起作用
【发布时间】:2020-08-18 06:27:47
【问题描述】:

我正在尝试自动发布到我的社交媒体帐户。我已经成功编写了登录脚本,登录后我很难找到用于传递我的帖子的 textarea 元素,之后我将尝试将图像附加到我的帖子,发布帖子并注销。但是现在,我登录后卡在定位文本区域。这是代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
usernameStr = 'JonJames3872@gmail.com'
passwordStr = 'JamesJon'
textStr = 'Testing my Post'
browser = webdriver.Chrome()
browser.get(('https://accounts.kingsch.at/?client_id=com.kingschat&scopes=%5B%22kingschat%22%5D&redirect_uri=https%3A%2F%2Fweb.kingsch.at%2F'))
# fill in username and password


password = browser.find_element_by_name('password')
password.send_keys(passwordStr)


username = browser.find_element_by_class_name('field')
username.send_keys(usernameStr)

signInButton = browser.find_element_by_class_name('submit-btn')
signInButton.click()

# I HAVE LOGGED IN, NOW THIS IS WHERE MY CODE HAS A PROBLEM

text = browser.find_element_by_xpath("/html/body/div[1]/div/div[2]/div/div[2]/div/div[1]/div/div/div[1]/textarea")
text.send_keys(textStr)

这是元素,来自检查元素:

<textarea placeholder="What's happening?" class="KingingBox__input"></textarea>

Textarea HTML Screenshot

Notification Screenshot

【问题讨论】:

  • 答案对你有用吗?用我写给你的那一部分替换你的最后一部分
  • @dpapadopoulos 非常感谢你,这是一种享受,完美,感谢一百万,你是最好的人!!!

标签: python selenium selenium-webdriver automation selenium-chromedriver


【解决方案1】:
  1. 我插入代码以在文本区域中写一些东西
  2. 我插入了代码来上传照片
  3. 我插入了代码来发布您自己的帖子

我认为 3 个问题中的 3 个都已完成。

试试这个代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import os


path = '/home/avionerman/Documents/stack'
browser = webdriver.Firefox(path)
browser.implicitly_wait(10)


usernameStr = 'JonJames3872@gmail.com'
passwordStr = 'JamesJon'
textStr = 'Testing my Post'
browser.get(('https://accounts.kingsch.at/?client_id=com.kingschat&scopes=%5B%22kingschat%22%5D&redirect_uri=https%3A%2F%2Fweb.kingsch.at%2F'))
# fill in username and password


password = browser.find_element_by_name('password')
password.send_keys(passwordStr)


username = browser.find_element_by_class_name('field')
username.send_keys(usernameStr)

signInButton = browser.find_element_by_class_name('submit-btn')
signInButton.click()


text = browser.find_element_by_class_name('KingingBox__input')
text.clear()
text.send_keys(textStr)

time.sleep(5)

image = browser.find_element_by_class_name('KingingBox__attachment-input').send_keys('/here/path/of_yours/th_574e7c36606306d94a4.jpg')
time.sleep(5)


inserted_photo = browser.find_element_by_class_name('KingingBox__attachments-list')
if inserted_photo.is_displayed():
  print("Element found, photo uploaded successfully")
  browser.find_element_by_css_selector('.KingingBox__submit-btn').click()
else:
  print("Element not found")

在这一行:

browser.implicitly_wait(10)

我们确定浏览器将等待最长 10 秒的时间让每个元素可见。如果 textarea 出现超过 10 秒,则脚本将停止。如果您看到巨大的延迟,请增加等待时间。

另外,如你所见,我使用了这一行:

text = browser.find_element_by_class_name('KingingBox__input')

为了定位文本区域。

在这一行:

image = browser.find_element_by_class_name('KingingBox__attachment-input').send_keys('/here/path/of_yours/th_574e7c36606306d94a4.jpg')

我找到负责接受上传的输入标签,然后将我要上传的文件的确切路径发送给它。

在最后部分:

inserted_photo = browser.find_element_by_class_name('KingingBox__attachments-list')
if inserted_photo.is_displayed():
  print("Element found, photo uploaded successfully")
  browser.find_element_by_css_selector('.KingingBox__submit-btn').click()
else:
  print("Element not found")

我将显示照片上传成功的元素保存到insert_photo 变量中。然后,如果显示此变量,则表示照片已正确上传。因此,既然我们有了文字和照片,我们就可以点击“发布”按钮了。

尽量使用非动态且不存在未来变化危险的静态属性。通过这种方式,您可以为代码创建稳定性。因为在您的示例中选择这样的 xpath 是有风险的。如果要立即排除或包含 div 或其他标签,则 xpath 将无用。

PS:因为测试,我上传了两个帖子,抱歉我不能尝试其他方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    相关资源
    最近更新 更多