当试图在selenium webdriver中调用Sendkeys方法时,它显示如下错误:
Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: call function result missing 'value'
(Session info: chrome=65.0.3325.146)
(Driver info: chromedriver=2.27.440174 (e97a722caafc2d3a8b807ee115bfb307f7d2cfd9),platform=Windows NT 6.1.7600 x86_64) (WARNING: The server did not provide any stacktrace information)
Run Code Online (Sandbox Code Playgroud)
Selenium Jarversion:3.10.0
selenium google-chrome webdriver selenium-chromedriver selenium-webdriver
我正在使用硒来抓取一些数据。
我点击的页面上有一个按钮说“custom_cols”。此按钮为我打开一个窗口,我可以在其中选择我的列。
这个新窗口有时需要一些时间才能打开(大约 5 秒)。所以为了处理这个我用过
WebDriverWait
Run Code Online (Sandbox Code Playgroud)
延迟为 20 秒。但有时它无法在新窗口中选择查找元素,即使该元素可见。这种情况只有十次发生一次,其余时间它都可以正常工作。
我也在其他地方使用了相同的功能(WebDriverWait),它按预期工作。我的意思是它会等到元素可见,然后在找到它的那一刻点击它。
我的问题是为什么即使我正在等待元素可见,新窗口上的元素也不可见。要在这里添加,我试图增加延迟时间,但我仍然偶尔会遇到该错误。
我的代码在这里
def wait_for_elem_xpath(self, delay = None, xpath = ""):
if delay is None:
delay = self.delay
try:
myElem = WebDriverWait(self.browser, delay).until(EC.presence_of_element_located((By.XPATH , xpath)))
except TimeoutException:
print ("xpath: Loading took too much time!")
return myElem
select_all_performance = '//*[@id="mks"]/body/div[7]/div[2]/div/div/div/div/div[2]/div/div[2]/div[2]/div/div[1]/div[1]/section/header/div'
self.wait_for_elem_xpath(xpath = select_all_performance).click()
Run Code Online (Sandbox Code Playgroud) python selenium web-scraping webdriverwait expected-condition
我想用硒和铬测试多个移动用户代理.我正在使用python 3.6并部署到heroku.基于http://chromedriver.chromium.org/mobile-emulation.
您可以在以下位置下载用于Windows和heroku的项目:
https://github.com/kc1/mobiletest
Run Code Online (Sandbox Code Playgroud)
(请记住,如果部署到heroku,则必须将FLASK_CONFIG设置为生产.另请注意,项目中的代码与此问题略有不同,因为我过去一周一直在使用代码.)
我有:
def some_long_calculation():
driver = create_chromedriver('kkk')
# driver = create_chromedriver()
driver.get("https://www.yahoo.com/")
.....
Run Code Online (Sandbox Code Playgroud)
并且:
def create_chromedriver(ua=False):
options = webdriver.ChromeOptions()
CHROMEDRIVER_PATH = os.getenv('$HOME') or basedir+'/chromedriver.exe'
FLASK_CONFIG = os.getenv('FLASK_CONFIG')
if ua:
mobile_emulation = {"deviceName": "Nexus 5"}
options.add_experimental_option("mobileEmulation", mobile_emulation)
if FLASK_CONFIG and FLASK_CONFIG == "production":
CHROMEDRIVER_PATH = '/app/.chromedriver/bin/chromedriver'
GOOGLE_CHROME_SHIM = os.getenv('$GOOGLE_CHROME_SHIM') or 'no path found'
options.binary_location = '/app/.apt/usr/bin/google-chrome-stable'
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
return webdriver.Chrome(executable_path=CHROMEDRIVER_PATH, options=options)
Run Code Online (Sandbox Code Playgroud)
如果我在启用移动浏览器的情况下在本地运行它按预期工作:
如果我在启用了移动浏览器的情况下在heroku上运行它:
然后我在heroku上尝试了移动用户,我得到了:
所以至少我知道设置工作就像chrome和chromedriver一样.
heroku日志:
2018-07-15T17:37:53.967643+00:00 app[web.1]: driver = create_chromedriver('kkk')
2018-07-15T17:37:53.967637+00:00 app[web.1]: png = …Run Code Online (Sandbox Code Playgroud) python selenium heroku selenium-chromedriver selenium-webdriver
我有一个问题:我想测试“选择”和“输入”。我可以像下面的代码那样写:原始代码:
12 class Sinaselecttest(unittest.TestCase):
13
14 def setUp(self):
15 binary = FirefoxBinary('/usr/local/firefox/firefox')
16 self.driver = webdriver.Firefox(firefox_binary=binary)
17
18 def test_select_in_sina(self):
19 driver = self.driver
20 driver.get("https://www.sina.com.cn/")
21 try:
22 WebDriverWait(driver,30).until(
23 ec.visibility_of_element_located((By.XPATH,"/html/body/div[9]/div/div[1]/form/div[3]/input"))
24 )
25 finally:
26 driver.quit()
# #??select??
27 select=Select(driver.find_element_by_xpath("//*[@id='slt_01']")).select_by_value("??")
28 element=driver.find_element_by_xpath("/html/body/div[9]/div/div[1]/form/div[3]/input")
29 element.send_keys("??")
30 driver.find_element_by_xpath("/html/body/div[9]/div/div[1]/form/input").click()
31 driver.implicitly_wait(5)
32 def tearDown(self):
33 self.driver.close()
Run Code Online (Sandbox Code Playgroud)
我想测试Selenium的“选择”功能。所以我选择sina网站选择一个选项并在textarea中输入文本。然后搜索它。但是当我运行这个测试时,它有错误:
Traceback (most recent call last):
File "test_sina_select.py", line 32, in tearDown
self.driver.close()
File "/usr/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 688, in close
self.execute(Command.CLOSE)
File "/usr/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 319, in …Run Code Online (Sandbox Code Playgroud) 对于我现在正在测试的门户,我遇到了无法创建任何 xpath 定位器的问题,一段时间后我发现这是因为“#document”,这会切断路径并制作简单的“复制 xpath” " 将路径指向一个完全不同的元素。
<iframe id="FRAMENAME" src="/webclient/workspace/launch-task/REMbl?ds=BP" width="100%" height="100%" frameborder="0" data-navitemname="navitemname" style="" xpath="1">
#document
<html>
CODE....
</html>
Run Code Online (Sandbox Code Playgroud)
我找到了解决方案,只需添加一个像这样的 switchTo:
driver.switchTo().frame("FRAMENAME");
Run Code Online (Sandbox Code Playgroud)
这有效并使其余代码正常工作,但是需要一些额外的时间来处理此命令,直到代码移动到下一行。
所以我想问一下,有没有更好的解决方案?更智能/更快的东西?
我担心当我有很多脚本的时候,执行时间会太长。
例如,我不使用 id 定位器,因为它们都是动态的,因此有时需要 xpath。
谢谢!
我试图搜索,但还没有找到明确的答案。在没有实际安装 Chrome 浏览器的 Windows Server 2016 上。我下载了正确的“chromedriver.exe”并将其放在“D:\Apps\chromedriver.exe”中。我已将完整路径添加到我的环境 PATH 中,作为“D:\Apps\chromedriver.exe”。
当我尝试启动使用最新 Selenium 的 Windows 服务时,出现以下错误:
Exception occurred: Failed initializing web driver: Message: unknown error: cannot find Chrome binary
(Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 10.0.14393 x86_64)
Run Code Online (Sandbox Code Playgroud)
问题:除了 chromedriver 之外,我是否还必须实际安装功能齐全的浏览器,还是只是在我的 Python 代码中找不到 chromedriver.exe(包含在下面以供全面披露):
def __init__(self, username, password, environment='cert'):
self.username = username
self.password = password
self.environment = environment
# Instantiate a chrome options object so you can set the size and headless preference
self.chrome_options = Options()
# Toggle Headless or not
if HEADLESS_TOGGLE == …Run Code Online (Sandbox Code Playgroud) selenium google-chrome python-3.x selenium-chromedriver google-chrome-headless
我有一个问题 --headlessPython Selenium for Chrome 模式。
代码
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
CHROME_DRIVER_DIR = "selenium/chromedriver"
chrome_options = webdriver.ChromeOptions()
caps = DesiredCapabilities().CHROME
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--remote-debugging-port=9222")
chrome_options.add_argument("--headless") # Runs Chrome in headless mode.
chrome_options.add_argument('--no-sandbox') # # Bypass OS security model
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--disable-gpu")
browser = webdriver.Chrome(desired_capabilities=caps, executable_path=CHROME_DRIVER_DIR, options=chrome_options)
browser.get("https://www.manta.com/c/mm2956g/mashuda-contractors")
print(browser.page_source)
browser.quit()
Run Code Online (Sandbox Code Playgroud)
当我删除chrome_options.add_argument("--headless")所有工作正常时,但是--headless*有了下一个问题
Please enable cookies.
Error 1020 Ray ID: 53fd62b4087d8116 • 2019-12-04 11:19:28 UTC
Access denied
What happened?
This website is using a security service to …Run Code Online (Sandbox Code Playgroud) python selenium cloudflare selenium-chromedriver google-chrome-headless
我有一个每 30 秒访问一个网站的 Python 脚本,每次我都需要一个不同的 IP 地址。
最好/最省时的解决方案是什么?
在线抓取免费代理?你知道一个从许多来源收集代理的 python 脚本吗?
使用 Tor 浏览器每次都有不同的 IP(我在 aws ec2 实例上使用 selenium,你们知道如何在 Ubuntu 服务器上使用 Tor 浏览器的教程?)
其他方法?
我遇到了与 FireFox 二进制文件相关的硒错误。
我使用反斜杠将 C:/Users/Mack/AppData/Local/Programs/Python/ 添加到 PATH 并重新启动。我在这里下载了我认为正确的文件https://github.com/mozilla/geckodriver/releases 我将该文件放在连接到 PATH 的目录中。
为了解决这个问题:我尝试使用两个反斜杠
binary = FirefoxBinary("C:\\Users\Mack\AppData\Local\Programs\Python\Python38-32\geckodriver-v0.27.0-win64\geckodriver.exe")
Run Code Online (Sandbox Code Playgroud)
这会引发相同的错误
我尝试使用一个反斜杠
binary = FirefoxBinary("C:\Users\Mack\AppData\Local\Programs\Python\Python38-32\geckodriver-v0.27.0-win64\geckodriver.exe")
Run Code Online (Sandbox Code Playgroud)
这会抛出:
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
Traceback (most recent call last):
File "C:\Users\Mack\Desktop\hacker-stories\Trends.py", line 32, in <module>
browser = webdriver.Firefox(**firefox_binary=binary**)
File "C:\Users\Mack\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 170, in __init__
RemoteWebDriver.__init__(
File "C:\Users\Mack\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in __init__
self.start_session(capabilities, browser_profile)
File "C:\Users\Mack\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "C:\Users\Mack\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, …Run Code Online (Sandbox Code Playgroud) 当我运行我的代码时出现以下错误:
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 85
Run Code Online (Sandbox Code Playgroud)
我尝试下载较新版本的 chromdriver 但它仍然给我同样的错误。我尝试替换当前正在运行的 chromedriver 和我最近下载的 chromedriver,但它仍然给出相同的错误,所以我下载了 chromdriver 的兼容版本,然后我使用了这一行代码:
driver = webdriver.Chrome(executable_path='D:\talha\Documents\Projects For Portfolio\SmmoBot\chromedriver_win32\chromedriver.exe')
Run Code Online (Sandbox Code Playgroud)
但这会返回以下错误:
selenium.common.exceptions.WebDriverException: Message: 'chromedriver.exe' executable needs to be in PATH
Run Code Online (Sandbox Code Playgroud) python selenium google-chrome selenium-chromedriver selenium-webdriver
selenium ×10
python ×7
webdriver ×2
cloudflare ×1
firefox ×1
geckodriver ×1
heroku ×1
iframe ×1
javascript ×1
protractor ×1
proxy ×1
python-3.x ×1
urllib3 ×1
web-scraping ×1