内部通信HTML中的可变/更改成员编号, selenium Python

mv1qrgav  于 2022-10-20  发布在  Python
关注(0)|答案(1)|浏览(177)

我正在努力使工作中的一些任务自动化。请求将无法工作,因为我没有对我的工作对讲机应用程序的管理员访问权限。因此我使用 selenium 。
我想在对讲机的聊天框中写“嘿”,然后发送消息。

问题是每次我进行新的对话时,ember号码都会改变。当我每次都复制正确的ember号码时,它就起作用了,但当改变对话时,它不再起作用了

我正在寻找某种脚本,每次将ember=XXXXX更改为正确的数字
与代码问题并不相关,但我在调试模式下使用Chrome,以避免每次我需要测试代码时登录,并且每次我想在聊天框中写“嘿”时,我都使用tkinter来按下按钮。
对不起,我知道很难复制这个问题。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options 

# ___________

# In order to run Selenium in an already opened browser / session, I need to run this code in CMD:

# cd C:\Program Files (x86)\Google\Chrome\Application

# 

# chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\Users\peter\testprogram"

# ___________

opt=Options()
opt.add_experimental_option("debuggerAddress","localhost:9222")
driver=webdriver.Chrome(executable_path="
C:\\ProgramFiles\\crromedriver\\chromedriver.exe",options=opt)

def hey():

    ember = 32890
    hey = driver.find_element_by_xpath('//*[@id="ember'+str(ember)+'"]/div/div[3]/div[1]/div/p')

    hey.send_keys("Hey!")

我想写“嘿!”的特定HTML元素:(这是下面的大HTML代码)

<p class="intercom-interblocks-align-left embercom-prosemirror-composer-block-selected" style="">Hey! This is where I want my text</p>

有人可能建议使用

hey = driver.find_element_by_class_name('intercom-interblocks-align-left embercom-prosemirror-composer-block-selected')
hey.send_keys("Hey!")

但这对我不起作用。
成员编号正在更改的HTML元素:

<div id="ember32890" class="u__relative inbox__conversation-composer__wrapper ember-view"><div>
    <div></div>
      <div>        

</div>

<div data-test-prosemirror-composer="" class="composer-inbox composer-style-basic o__fit conversation__text embercom-prosemirror-composer ">
    <style>
  .ProseMirror {
    outline: none;
    white-space: pre-wrap;
  }

  .ProseMirror .intercom-interblocks-html-block {
    white-space: normal;
  }

  li.ProseMirror-selectednode {
    outline: none;
  }

  .ProseMirror-selectednode.embercom-prosemirror-composer-image img,
  .ProseMirror-selectednode.embercom-prosemirror-composer-video iframe,
  .ProseMirror-selectednode.embercom-prosemirror-composer-messenger-card
    .intercom-interblocks-messenger-card,
  .ProseMirror-selectednode.embercom-prosemirror-composer-html-block,
  .ProseMirror-selectednode.embercom-prosemirror-composer-button .intercom-h2b-button {
    outline: 2px solid #8cf;
  }

  hr.ProseMirror-selectednode,
  .embercom-prosemirror-composer-template.ProseMirror-selectednode,
  .embercom-prosemirror-composer-mention.ProseMirror-selectednode {
    outline: 1px solid #8cf;
  }
</style>
    <div>
<!----><div contenteditable="true" role="textbox" dir="auto" data-insertable="true" class="ProseMirror embercom-prosemirror-composer-editor dir-auto"><p class="intercom-interblocks-align-left embercom-prosemirror-composer-block-selected" style="">Hey!Hey!Hey!Hey!Hey!</p><p class="intercom-interblocks-align-left" style=""><br></p></div></div>
      <div class="flex flex-row flex-wrap gap-4 embercom-prosemirror-composer-attachment-list">
<!----></div>

      <!---->
      <!---->
      <!---->
      <!---->

      <!---->
      <div></div>
<!---->

<!----></div>
        <!---->

<!----></div></div>
mspsb9vt

mspsb9vt1#

如果你想使用ember,这里有一个可能的解决方案:

hey = driver.find_element_by_xpath('//*[contains(@id="ember")]/div/div[3]/div[1]/div/p')
hey.send_keys("Hey!")

如果id="ember[0-9]+"中有多个元素,这可能会失败。
如果要直接访问p标记,请使用find_element_by_css_selector,如下所示:

hey = driver.find_element_by_css_selector('.intercom-interblocks-align-left.embercom-prosemirror-composer-block-selected')
hey.send_keys("Hey!")

使用find_element_by_class_name的代码无法工作,因为它需要一个类名,而您传递的是两个类名(类名用空格分隔)。

相关问题