@r1mple

Как перезапустить бразуер в селениум?

В общем, мне надо перезапускать браузер в селениуме, именно перезапускать. Есть цикл фор, и в нем запускается селениум, на следующей итерации мне нужно перезапустить браузер, но уже с другим прокси, ибо на сервере кол-во запросов ограничено, нужно это обойти. В гугле поискал - ничего не работает.
Вот код
import sys
import config
from excel import Excel
import keyboard
import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup

def cooldown(cooldown):
    for i in range(cooldown, 0, -1):
        print('Cooldown ends in {}'.format(i), end='')
        print('\r', end='')
        time.sleep(1)

for i in range(1, len(sys.argv)):
    if sys.argv[i] == '--help':
        print('1')
        sys.exit(0)

URL = sys.argv[1]
DEVICE = sys.argv[2] if sys.argv[2] == 'Desktop' or sys.argv[2] == 'desktop' or sys.argv[2] == 'mobile' or sys.argv[2] == 'Mobile' else sys.exit('Device is invalid. It\'s either "Desktop" or "Mobile"')

print('Url: {}\nDevice: {}'.format(URL, DEVICE))

keywords = []
resultArray = []

for array in Excel.getDataFromCSVToArray('keywords.csv'):
    for element in array:
        keywords.append(element)

keywordsSplit = [keywords[d:d+10] for d in range(0, len(keywords), 10)]

options = webdriver.ChromeOptions()

options.add_argument('--ignore-certificate-errors')
options.add_argument('--ignore-ssl-errors')
options.add_argument('--ignore-gpu-blacklist')
options.add_argument('--use-gl')
options.add_argument('--disable-web-security')
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0')
options.add_experimental_option("excludeSwitches", ['enable-logging'])
# options.add_extension(config.ADBLOCKPATH)

driver = webdriver.Chrome(chrome_options=options, executable_path=config.DRIVERPATH)
driver.get(config.APIURL)

#Wait till the page loads, even tho driver.get waits for the page to load, we still wait additional seconds for it
WebDriverWait(driver, 4).until(EC.presence_of_element_located((By.XPATH, '/html/body')))

#collecting the data, storing it in the resulting array
def collectData(keywordsIterable, iterable):
    inputField = driver.find_element_by_class_name('vs__search')
    inputField.click()
    inputField.clear()
    inputField.send_keys('Israel')
    inputField.send_keys(Keys.ENTER)
    selectDeviceButtons = driver.find_elements_by_class_name('btn-lg')
    selectDeviceButtons[0].click() if DEVICE.lower() == 'desktop' else selectDeviceButtons[1].click()

    domainField = driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/div/section[2]/div/div/div[1]/div[3]/div/div[1]/input')
    domainField.clear()
    domainField.send_keys(URL)

    try:
        addKeywordsButton = driver.find_element_by_class_name('add-more-keywords')
        addKeywordsButton.click()
    except:
        pass

    try:
        for i in range(0, 10):
            driver.find_element_by_name(f'keyword{str(i+1)}').clear()
            driver.find_element_by_name(f'keyword{str(i+1)}').send_keys(keywordsIterable[iterable][i])
    except:
        pass

    print('Solve the captcha. \nOnce you are done press "Shift + g".')
    print('When results are loaded press "Shift + g".')
    keyboard.wait('shift + g') # wait tille the results loads

    results = BeautifulSoup(driver.find_element_by_xpath('//*[@id="appFreeSerpChecker"]/section[2]/div/div/div[3]/div').get_attribute('innerHTML'), 'html.parser')
    resultArray.append(results.find_all('div', class_='keyword-block'))
    
for i in range(0, len(keywordsSplit)):
    if i == len(keywordsSplit):
        collectData(keywordsSplit, i)
        driver.refresh()
        print('Done.')
    collectData(keywordsSplit, i)
    driver.refresh()
    print('Got all the data from this page.')
    cooldown(15)

driver.close()

print(resultArray)
# Analyze the data

input('Any key to exit the programm...')
  • Вопрос задан
  • 229 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы