Как мне сделать случайный щелчок где-нибудь на странице через n секунд, чтобы сохранить сеанс при использовании селена? Идет очистка, если мы ничего не сделаем, сеанс будет отключен. Есть ли другой способ сделать какую-то активность/поддержать сеанс?
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import json
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.common.exceptions import TimeoutException
options = Options()
options.add_argument("user-data-dir=C:\\Users\\user\\AppData\\Local\\Google\\Chrome\\User Data")
driver = webdriver.Chrome(executable_path='C:/chromedriver.exe', options=options)
driver.maximize_window()
driver.get('URL')
time.sleep(15)
def find_button():
driver.switch_to.frame(driver.find_element_by_xpath("//*[@id=\"root\"]/main/div[1]/div/div/section/div[1]/div/iframe"))
try:
button = WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.XPATH, '/html/body/div[1]/div[2]/div/div/div/div[3]/button')))
if button:
button.click()
except TimeoutException as e:
pass
WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#root > div.css-1dskt1c.ev4oou50 > main > div.css-fxcew.eqhy1wt0 > div.css-1o0ko6s.ejzudwb1 > div.css-wp7h99.ebewhpb0 > section.css-n56t2b.e1bk88wc2 > header > div.css-8hdyh3.esmanvo0 > svg'))).click()
while True:
info = driver.find_element_by_css_selector('#root > div.css-1dskt1c.ev4oou50 > main > div.css-fxcew.eqhy1wt0 > div.css-1o0ko6s.ejzudwb1 > div.css-wp7h99.ebewhpb0 > section.css-conr1v.e1bk88wc2 > div > div > div.css-1t6u4d1.ezcyhjn1 > div.css-r8tf41.eyg06i70')
result = info.text
result = result.replace('\n', ' ')
time.sleep(5)
dictionary = {"1st 12": result[6:22], "2nd 12": result[30:46]}
json_dump = json.dumps(dictionary)
print(json_dump)
find_button()
Чтобы выполнить щелчок с помощью селена, вы можете выполнить следующие два шага. Когда ваша программа запускается, создайте поток или другой процесс, который продолжает щелкать каждые n секунд. Вы можете легко сделать это, используя модуль потоковой обработки Python или модуль многопроцессорности.
element = driver.find_element_by_id("myelement")
element.click()
Хотя другим предложением было бы использовать безголовый при использовании селена.
Я все еще занимаюсь отладкой, поэтому мне нужно посмотреть, что происходит, но как --headless
поможет?
@AbhishekRai Попробуйте передать тот же экземпляр объекта, что и объект, в другой поток. В случае, если это не работает, попробуйте портировать его на многопроцессорность из многопоточности. Также было бы очень полезно, если бы мы могли взглянуть на код. Так как трудно рекомендовать, основываясь только на текстовом описании. Не могли бы вы также поделиться кодом.
позвольте мне сделать это.
. Добавил код. Я попытался заставить кнопку щелкнуть другую функцию и очистить другую и вызвать их с помощью If main ..Thread target = find_button и т. д. Однако сработала только 1-я функция, вторая открыла новое окно, не зная, что делать, потому что Я предполагал, что driver
будет на той же странице. Думаю, это не так.
@AbhishekRai, не могли бы вы поделиться полным кодом, пожалуйста. Таким образом, я мог скопировать и запустить его на своей машине и попытаться отладить.
Только один вопрос. Я попробовал это, чтобы закрыть повторяющееся всплывающее окно. Когда я вызываю 2 функции с помощью Threading... открывается новое хромированное окно... Как об этом позаботиться?