我想刮掉由无限滚动实现的页面的所有数据.以下python代码有效.
for i in range(100):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(5)
Run Code Online (Sandbox Code Playgroud)
这意味着每次向下滚动到底部时,我都需要等待5秒钟,这通常足以让页面完成加载新生成的内容.但是,这可能不是时间效率.页面可以在5秒内完成加载新内容.每次向下滚动时,如何检测页面是否已完成加载新内容?如果我能检测到这一点,一旦我知道页面加载完毕,我可以再次向下滚动以查看更多内容.这更节省时间.
我正在尝试使用selenium for python在浏览器中打开一个新选项卡或一个新窗口.如果打开新选项卡或新窗口,则重要的是打开浏览器的第二个实例非常重要.
我已经尝试了几种不同的方法,但都没有成功.
切换到一个不存在的窗口,希望在找不到所述窗口时打开一个新窗口:
driver.switch_to_window(None)
通过打开窗口迭代(虽然目前只有一个)
for handle in driver.window_handles:
driver.switch_to_window(handle)
Run Code Online (Sandbox Code Playgroud)试图模拟键盘按键
from selenium.webdriver.common.keys import Keys
driver.send_keys(Keys.CONTROL + 'T')
Run Code Online (Sandbox Code Playgroud)这一个特别的问题是,它似乎并不能直接发送键浏览器,只有这样的特定元素:
driver.find_element_by_id('elementID').send_keys(Keys.CONTROL + 'T')
Run Code Online (Sandbox Code Playgroud)
但是,当诸如此类的命令被发送到元素时,它似乎什么都不做.我试图在页面上找到最顶层的HTML元素并将密钥发送到该元素,但是再次遇到了失败:
driver.find_element_by_id('wrapper').send_keys(Keys.CONTROL + 'T')
Run Code Online (Sandbox Code Playgroud)
我在网上找到的另一个版本,并且无法验证其有效性或缺乏有效性,因为我不确定需要导入的类/模块
act = ActionChains(driver)
act.key_down(browserKeys.CONTROL)
act.click("").perform()
act.key_up(browserKeys.CONTROL)
Run Code Online (Sandbox Code Playgroud)
与不同语法非常相似的东西(我不确定这些中的一个或两个是否是正确的语法)
actions.key_down(Keys.CONTROL)
element.send_keys('t')
actions.key_up(Keys.CONTROL)
Run Code Online (Sandbox Code Playgroud) 我将 Selenium 与 Python 结合使用(在 Jupyter 笔记本中)。我打开了许多选项卡,比如说 5 个选项卡(所有元素都已完成加载),我想循环浏览它们并执行两件事:
(在下面的代码中,我重点关注屏幕截图要求,但也非常想知道如何将其另存为 PDF)
此代码允许循环浏览选项卡:
numTabs = len(driver.window_handles)
for x in range(numTabs):
driver.switch_to.window(driver.window_handles[x])
time.sleep(0.5)
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试添加driver.save_screenshot()如下所示的调用,代码似乎在拍摄第一个屏幕截图后停止。具体来说,为第一个选项卡(索引为 0)创建“0.png”,并切换到下一个选项卡(索引为 1),但停止进一步处理。它甚至不会循环到下一个选项卡。
numTabs = len(driver.window_handles)
for x in range(numTabs):
driver.switch_to.window(driver.window_handles[x])
driver.save_screenshot(str(x) + '.png') #screenshot call
time.sleep(0.5)
Run Code Online (Sandbox Code Playgroud)
Edit1:
我修改了代码,如下所示,开始从 中截取屏幕截图,window_handles[1]因为[0]我实际上并不需要 中的屏幕截图[0],但现在甚至没有生成一个屏幕截图。因此,save_screenshot()即使在初次通话后,该通话似乎也不起作用switch_to.window()。
tabs = driver.window_handles
for t in range(1, len(tabs)):
print("Processing tab " + tabs[t])
driver.switch_to.window(tabs[t])
driver.save_screenshot(str(t) + '.png') …Run Code Online (Sandbox Code Playgroud) python selenium window-handles webpage-screenshot jupyter-notebook
我们正在与 Selenium webdriver 合作,对 Internet Explorer 11 进行 UI 测试。\xc2\xa0\n在测试的 Web 应用程序中,会弹出几个屏幕。在一些测试中,我们最终得到了三个浏览器窗口,因此也得到了三个 Driver.WindowHandles。\xc2\xa0\n要从一个 WindowHandle 切换到另一个,我们预计 Driver.WindowHandles 将按照最旧的窗口在前、最新的窗口在后的方式进行排序。但事实并非如此:它完全是随机的!\xc2\xa0
\n\n因为窗口句柄是一个 GUID,所以我们最终创建了一个字典,以 WindowHandle GUID 作为键,其值为浏览器窗口中加载的页面类型。\n但这也会导致在关闭窗口时维护字典。\ xc2\xa0
\n\n对于这么简单的事情来说,这似乎是一个很大的工作量。对此有更好的解决方案吗?
\n我尝试了各种各样的命令
driver.switch_to_window("_blank")
Run Code Online (Sandbox Code Playgroud)
要么
driver.switch_to_window(None)
Run Code Online (Sandbox Code Playgroud)
但这些都没有奏效.应该怎么做?谢谢.
我正在使用 Selenium Web 驱动程序和 Python。我如何循环浏览多个打开的 Chrome 浏览器选项卡并在每个页面上停留 30 秒,然后循环回到第一个 URL 并一遍又一遍地进行迭代?我可以打开选项卡/指定所需的 URL。但是我无法弄清楚迭代每个选项卡的循环
#import from selenium driver
from selenium import webdriver
#import from use of Key actions && Action chains (commands) from selenium driver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
import time
#designate each URL to be opened
url_1 = 'https://www.google.com/'
url_2 = 'https://github.com/'
url_3 = 'https://www.kaggle.com/'
#designate webdriver as chrome
driver = webdriver.Chrome()
#open 1st URL in first tab
driver.get(url_1)
#wait
driver.implicitly_wait(15)
#open new …Run Code Online (Sandbox Code Playgroud) 我正在使用 python Selenium,以及 digitalocean 的无头 ubuntu,其中有无头 Chrome。我用了
driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + Keys.TAB)
Run Code Online (Sandbox Code Playgroud)
在 senium.webdriver.common.keys
但这不起作用。
我导入了所需的所有内容,没有 python 语法错误,并成功运行,但选项卡未随我的代码切换。
driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't')
Run Code Online (Sandbox Code Playgroud)
也不起作用。相同的代码可以在我的本地计算机上的选项卡之间切换,该计算机具有物理键盘和显示器。顺便说一句,我将 pyvirtualdisplay 与我的无头 Chrome 一起使用。
我怀疑使用 headless Ubuntu 和 headless Chrome 可能会导致这个问题。我猜想无头 Ubuntu 无法发送密钥,如上面代码所示。
如何让我的远程无头 Ubuntu 将密钥发送到浏览器?
driver.page_source不要返回所有的源代码。它只是详细地打印了部分代码,但它遗漏了大部分代码。我怎样才能解决这个问题?
这是我的代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
def htmlToLuna():
url ='https://codefights.com/tournaments/Xph7eTJQssbXjDLzP/A'
driver = webdriver.Chrome('C:\\Python27\\chromedriver\\chromedriver.exe')
driver.get(url)
web=open('web.txt','w')
web.write(driver.page_source)
print driver.page_source
web.close()
print htmlToLuna()
Run Code Online (Sandbox Code Playgroud) 使用 MAC OS 我尝试使用 selenium firefox webdriver 打开新选项卡
url = "https://google.com"
mail = wd.Firefox()
mail.get(url)
time.sleep(1)
actions = ActionChains(mail) mail.find_element_by_xpath("/html/body/div[2]/div[2]/div[1]/h2/span[2]/span[1]").click()
time.sleep(1)
ActionChains(mail).key_down(Keys.COMMAND).send_keys('t').key_up(Keys.COMMAND).perform()
mail.close()
mail.quit()
Run Code Online (Sandbox Code Playgroud)