使用 Python/Selenium 重用 chrome 实例

问题描述 投票:0回答:0

我从谷歌找到了一些信息,但不完全是我需要的。

我们注意到我们的脚本在运行期间打开了 ~9 个 chrome 实例。我们希望它只使用一个,然后在同一会话中进入下一部分(或最多 2 个实例)。

    #!/usr/bin/python
# - Import Tools
import datetime
import time
import mysql.connector

from datetime import datetime
from discord_webhook import DiscordWebhook
from discord_webhook import DiscordWebhook, DiscordEmbed
from selenium import webdriver
import time
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.proxy import Proxy, ProxyType
from selenium.webdriver import ActionChains
from selenium.common.exceptions import NoSuchElementException

prox = Proxy()
prox.proxy_type = ProxyType.MANUAL
prox.http_proxy = "http://N1Proxy:[email protected]:12321"
prox.ssl_proxy = "http://N1Proxy:[email protected]:12321"

capabilities = webdriver.DesiredCapabilities.CHROME
prox.add_to_capabilities(capabilities)

ser = Service(r"/bin/chromedriver.exe")
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
# options.add_argument("--headless=new")
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome(desired_capabilities=capabilities, options=options)

BP_Link = 'https://www.brokenplanetmarket.com/shop'
PALACE_Link = 'https://shop.palaceskateboards.com/collections/new'

BROKEN_PLANET = []
driver.get(BP_Link)
time.sleep(2)

elements = driver.find_elements(
    By.XPATH, value='//div[@class="MuiPaper-root MuiCard-root sc-HzFiz fXFQsJ MuiPaper-elevation0 MuiPaper-rounded"]/h6[2]')

for element in elements:
    actionChains = ActionChains(driver)
    actionChains.move_to_element(element).perform()

product_name = driver.find_elements(
    By.XPATH, value='//div[@class="MuiPaper-root MuiCard-root sc-HzFiz fXFQsJ MuiPaper-elevation0 MuiPaper-rounded"]/h6[1]')
product_price = driver.find_elements(
    By.XPATH, value='//div[@class="MuiPaper-root MuiCard-root sc-HzFiz fXFQsJ MuiPaper-elevation0 MuiPaper-rounded"]/h6[2]')
product_sizes = driver.find_elements(
    By.XPATH, value='//div[@class="sc-dkdnUF dGdejh"]/ul')
product_image = driver.find_elements(
    By.XPATH, value='//div[@class="sc-bWXABl kVmUNz"]/img')
product_link = driver.find_elements(
    By.XPATH, value='//a[@class="sc-fIavCj cKFnDV"]')

for i in range(len(product_name)):
        Name = product_name[i].text
        Price = product_price[i].text.replace('£', "")
        Price_GBP = '£ ' + Price
        Sizes = product_sizes[i].text
        Link = product_link[i].get_attribute('href')
        Image = product_image[i].get_attribute('currentSrc')

        print(Name, "-", Price_GBP, "-", Sizes.split(), "-", Link, "-", Image)

##########################----PALACE----################################

PALACE = []
driver.get(PALACE_Link)
time.sleep(2)

Link_list = []
Links = driver.find_elements(
    By.XPATH, value='//div[@class="product-grid-item clearfix"]/a[1]')
for Link in Links:
    Link_list.append(Link.get_attribute('href'))

for Link in Link_list:
    driver.get(Link)


    product_name = driver.find_element(
        By.XPATH, value = '//div[@id="content"]/div/div[2]/h1')
    
    try:
        product_price = driver.find_element(
            By.XPATH, value = '//h3[@class="product-price"]/span').text.replace('£', "")
    except NoSuchElementException:
        product_price = 'Sold out'
        
    product_image = driver.find_element(
        By.XPATH, value = '//div[@class="product-images"]/div[1]/div[1]/div[1]/img[1]')
    
    try:
        product_sizes = driver.find_element(
            By.XPATH, value = '//div[@id="product-variants"]/div[1]/select').text
    except NoSuchElementException:
        product_sizes = 'Out of stock'

    Name = (product_name).text
    Price = (product_price)
    Link = Link
    Image = (product_image).get_attribute('src')
    Sizes = (product_sizes)
    


    print(Name, "-", Price, "-", Link, "-", Image, "-", Sizes.split())

driver.quit()

我们如何在一个或两个浏览器实例中运行它而不是打开多个?

python selenium-webdriver screen-scraping
© www.soinside.com 2019 - 2024. All rights reserved.