![](/img/trans.png)
[英]Python selenium - session not created: This version of ChromeDriver only supports Chrome version 86 using ChromeDriver and Chrome with Selenium
[英]Chromedriver only supports characters in the BMP error while sending Emoji with ChromeDriver Chrome using Selenium Python to Tkinter's label() textbox
我正在自動化 whatsapp 消息,並希望通過 tkinter window 將它們發送出去。 在這個 tkinter window 中,我在.label() 的幫助下創建了一個消息框,並且我能夠連接到 whatsapp web 到 Z516FF0058ZDF478.
目前,我已經可以發送消息,但沒有表情符號。 當我包含表情符號時,我收到此錯誤“Chromedriver 僅支持 BMP 中的字符”。 如何包含表情符號?
from selenium import webdriver
JS_ADD_TEXT_TO_INPUT = """
var elm = arguments[0], txt = arguments[1];
elm.value += txt;
elm.dispatchEvent(new Event('change'));
"""
browser = webdriver.Chrome('C:\\Python37\\chromedriver.exe')
browser.get("https://google.com/")
elem = browser.find_element_by_name('q')
text = "🌎 🌊 " + u'\u2764'
browser.execute_script(JS_ADD_TEXT_TO_INPUT, elem, text)
此錯誤消息...
selenium.common.exceptions.WebDriverException: Message: unknown error: ChromeDriver only supports characters in the BMP
...意味着ChromeDriver無法通過send_keys()
方法發送表情符號信號。
ChromeDriver 僅支持 BMP 中的字符是Chromium團隊的一個已知問題,因為ChromeDriver在FFFF
之后仍然不支持帶有 Unicode 的字符。 因此,不可能通過 ChromeDriver 發送任何超出FFFF
的字符。 因此,任何發送SMP字符(例如CJK 、 Emojis 、 Symbols等)的嘗試都會引發錯誤。
一個潛在的替代方法是使用GeckoDriver / Firefox 。
代碼塊:
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Firefox(executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe') driver.get('https://www.google.com/') # Chineese Character WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, "q"))).send_keys("𠀀") # Emoji Character WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, "q"))).send_keys("💩")
瀏覽器快照:
幾個鏈接:
對於那些想在 Chrome 上發送表情符號的人
解決方案
async sendKeysWithEmojis(element, text) {
const script = `var elm = arguments[0],
txt = arguments[1];elm.value += txt;
elm.dispatchEvent(new Event('keydown', {bubbles: true}));
elm.dispatchEvent(new Event('keypress', {bubbles: true}));
elm.dispatchEvent(new Event('input', {bubbles: true}));
elm.dispatchEvent(new Event('keyup', {bubbles: true}));`;
await this.driver.executeScript(script, element, text);
}
像這樣稱呼它
const element = await this.driver.findElement(selector);
await sendKeysWithEmojis(element, '🚀😀 This one shall pass 🚀😀');
這里發生了什么? 我們正在使用事件模擬本機按鍵
請注意, {bubbles: true}
是可選的(在我的情況下由於復雜的包裝輸入而需要)
chrome 驅動程序網站上有一個開放的錯誤,該錯誤已於本月修復 (14.11.21)
https://bugs.chromium.org/p/chromedriver/issues/detail?id=2269
這是錯誤報告。
如何使用新的 chrome 驅動程序:
先去: https ://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Win/942085/
從那里下載 chrome 驅動程序。(如圖所示的第一個標記)。
那么您將需要使用 mini_installer.exe 安裝新的 chrome v98
(注意其所有實驗) ,
沒有這個,由於版本兼容性,您將無法使用新驅動程序。
歡迎大家向我提問,我設法使它與我在whatsapp上使用selenium chrome驅動程序添加的版本一起工作。
編輯: chrome 版本 98 stable 將在 30 天內發布,因此您可以嘗試安裝 beta 版本而不是 chromium 版本,看看它是否正常工作。
你不必刪除舊的 chrome 版本,我知道這個線程是關於 python 的,但是在 java 中(我猜 python 也支持它)你可以這樣做:
options.setBinary(System.getProperty("user.home") + "\\AppData\\Local\\Chromium\\Application\\chrome.exe");
它將設置鉻版本的路徑。
這是我在 Excel SeleniumBasic 中使用 VBA 和 ChromeDriver 解決此問題的方法:
objIE.ExecuteScript "arguments[0].value = arguments[1]", Array(objIE.FindElementById("sqlvalue1"), Sheets("SheetName").Range("A1").Value)
這樣可以避免使用SendKeys
,這是在使用此錯誤消息運行時出現的錯誤。
復制粘貼!!! 通過將文本復制到剪貼板然后將其粘貼到元素中來解決這個問題非常容易。
import pyperclip
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("https://google.com")
title = driver.title
assert title == "Google"
driver.implicitly_wait(0.5)
search_box = driver.find_element(by=By.NAME, value="q")
pyperclip.copy("Hi 😀 This is a test message ! 👌🏻")
act = ActionChains(driver)
act.key_down(Keys.CONTROL).send_keys("v").key_up(Keys.CONTROL).perform()
您可以使用
js_code = """
var elm = arguments[0], txt = arguments[1];
elm.value += txt;
elm.dispatchEvent(new Event('change'));
"""
your_text = 'this my text 🤯😡🗣👣'
element = driver.find_element_by_xpath('//*[@data-testid="input"]')
driver.execute_script(js_code, element, your_text)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.