所以我试图在我的WebDriver中打开新的标签页。我想这样做,因为打开一个新的WebDriver为每个网站使用PhantomJS约3.5秒,我想要更快...
我使用的是一个多进程python脚本,我希望从每个页面中获取一些元素,因此工作流如下所示:
Open Browser
Loop throught my array
For element in array -> Open website in new tab -> do my business -> close it
#!/usr/bin/env python
import multiprocessing, time, pika, json, traceback, logging, sys, os, itertools, urllib, urllib2, cStringIO, mysql.connector, shutil, hashlib, socket, urllib2, re
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from PIL import Image
from os import listdir
from os.path import isfile, join
from bs4 import BeautifulSoup
from pprint import pprint
def getPhantomData(parameters):
try:
# We create WebDriver
browser = webdriver.Firefox()
# Navigate to URL
browser.get(parameters['target_url'])
# Find all links by Selector
links = browser.find_elements_by_css_selector(parameters['selector'])
result = []
for link in links:
# Extract link attribute and append to our list
result.append(link.get_attribute(parameters['attribute']))
browser.close()
browser.quit()
return json.dumps({'data': result})
except Exception, err:
browser.close()
browser.quit()
print err
def callback(ch, method, properties, body):
parameters = json.loads(body)
message = getPhantomData(parameters)
if message['data']:
ch.basic_ack(delivery_tag=method.delivery_tag)
else:
ch.basic_reject(delivery_tag=method.delivery_tag, requeue=True)
def consume():
credentials = pika.PlainCredentials('invitado', 'invitado')
rabbit = pika.ConnectionParameters('localhost',5672,'/',credentials)
connection = pika.BlockingConnection(rabbit)
channel = connection.channel()
# Conectamos al canal
channel.queue_declare(queue='com.stuff.images', durable=True)
channel.basic_consume(callback,queue='com.stuff.images')
print ' [*] Waiting for messages. To exit press CTRL^C'
try:
channel.start_consuming()
except KeyboardInterrupt:
pass
workers = 5
pool = multiprocessing.Pool(processes=workers)
for i in xrange(0, workers):
pool.apply_async(consume)
try:
while True:
continue
except KeyboardInterrupt:
print ' [*] Exiting...'
pool.terminate()
pool.join()
编者按:这个答案不再适用于新的Selenium版本。参考这个评论。
您可以通过组合键命令+t或命令+w(OSX)来打开/关闭选项卡。在其他OSs上,您可以使用控件+t/控件+w。
在selenium中,您可以模拟这样的行为。您将需要创建一个webdriver和尽可能多的选项卡,因为您需要测试。
这是代码。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("http://www.google.com/")
#open tab
driver.find_element_by_tag_name('body').send_keys(Keys.COMMAND + 't')
# You can use (Keys.CONTROL + 't') on other OSs
# Load a page
driver.get('http://stackoverflow.com/')
# Make the tests...
# close the tab
# (Keys.CONTROL + 'w') on other OSs.
driver.find_element_by_tag_name('body').send_keys(Keys.COMMAND + 'w')
driver.close()
我有一个每行都有一个URL的文本文档。我希望每个URL都在一个新选项卡中打开。这是我到目前为止所拥有的: 这给了我一个错误: 回溯(最近一次调用last):驱动程序中第100行的文件“scraper.py”。execute\u script(“window.open(url,'new\u window')”)文件“C:\Python37\lib\site packages\selenium\web
因此,我有一个,我想冲浪到新选项卡中,链接是不可点击的,所以当我点击这个链接时,什么也不会发生,这将不起作用(甚至不手动): 这是我的web URL:
我想使用Selenium WebDriver和Python在不同的选项卡中打开相当多的URL。 在我的代码中有什么可以改变的地方来让新的URL在new选项卡中打开吗? 谢谢你的帮助!
我想打开我在新选项卡中找到的网站链接。我已经尝试打开一个新的标签,并将链接的url传递给这里建议的驱动程序,然而,新的标签根本不会打开。(关于如何打开新标签,还有其他几个建议,但似乎都不适合我。) 因此,我最近的尝试是右键单击链接并按“T”以在新选项卡中打开链接,如下所示:
如何使用Java中的Selenium WebDriver(又名Selenium 2)在现有的Firefox浏览器中打开新的选项卡?
请告知如何使用Python selenium Chrome WebDriver在新选项卡中打开链接。所以,我不是在问如何简单地打开一个新标签,也不是在问如何用Firefox打开一个新标签。 此选项卡将在新选项卡中打开相同的页面: 因此,当试图通过Selenium或requests访问此元素的链接时,它将重定向到搜索结果本身的页面。有鉴于此,我决定用一种不同的方法来解决这个问题。 因此,我决定放弃在