Могу ли я интегрировать базу данных с моим сценарием selenium python - PullRequest
0 голосов
/ 05 марта 2020

У меня есть сценарий, когда сначала я нажму API, чтобы получить все данные и добавить эти данные в свой сценарий селена python. Но перед этим я хочу автоматически запускать мой сценарий, когда в моей базе данных есть запись. Средства пишут, что теперь я вручную запускаю свой сценарий. Я хочу запускать его автоматически каждый раз, когда в моей базе данных появляется новая запись. API, который я использую, - это в основном запись в базе данных. Итак, поток: во-первых, в БД есть запись о пользователе, эту запись я получу в форме API и всякий раз, когда есть запись, мой скрипт должен запускаться с использованием API.

Ниже мой сценарий селена

import time
import requests
from selenium import webdriver

base_url="https://www.fitotouch.com"
base_url1= "https://www.fitotouch.com/qitouch"
qty: int=2
cart_value : int = 1
driver = webdriver.Chrome('E:/Chrome driver/chromedriver.exe')
driver.maximize_window()
#function of our 'driver' object.
driver.implicitly_wait(10) #10 is in seconds
driver.get(base_url)
driver.implicitly_wait(10)

driver.find_element_by_name('password').send_keys("*****")
driver.implicitly_wait(10)
driver.find_element_by_class_name('arrow-icon').click()
data = requests.get('http://110.93.230.117:1403/api/order/5e439b7052fcf2189ccb5207').json()
print(data)

driver.implicitly_wait(10)
time.sleep(2.4)

#driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div[2]/div[3]/div[1]/a/span').click()
time.sleep(2.4)
driver.get('https://www.fitotouch.com/account/login/create')
time.sleep(2.4)
driver.switch_to.frame("accountFrame")
time.sleep(2.4)
driver.find_element_by_xpath('//*[@id="root"]/div/div/div/div[1]/div[1]/div/input').send_keys(data['FirstName'])
driver.find_element_by_xpath('//*[@id="root"]/div/div/div/div[1]/div[2]/div/input').send_keys(data['LastName'])
driver.find_element_by_xpath('//*[@id="root"]/div/div/div/div[2]/div/input').send_keys(data['Email'])
driver.find_element_by_xpath('//*[@id="root"]/div/div/div/div[3]/div/input').send_keys("*****")
driver.find_element_by_xpath('//*[@id="root"]/div/div/div/div[4]/div/input').send_keys("*****")
driver.find_element_by_xpath('//*[@id="root"]/div/div/div/button').click()
driver.get("https://www.fitotouch.com/fitoki/f-001-jing-fang-bai-du-wan")
#product_category=['driver.get("https://www.fitotouch.com/fitoki/f-001-jing-fang-bai-du-wan")','driver.get("https://www.fitotouch.com/soria-chinasor/style-02-hzewl")']
driver.execute_script("window.scrollTo(0, 150)")
time.sleep(2.4)
cart = driver.find_element_by_xpath('/html/body/div[1]/main/article/section/div[2]/div/section/article/section[1]/section/div/div[3]/div/div')

if qty > 0:

  for i in range(qty):
   cart.click()
   time.sleep(2.4)
  # print("quantity was" +qty)

else:
 cart.click()

 url = driver.current_url
 print(url)

1 Ответ

0 голосов
/ 05 марта 2020

Я не уверен, что это лучшее решение, но на ум приходит то, что вам нужно, чтобы скрипт постоянно работал некоторое время l oop. За пределами l oop установите переменную, которая представляет последний индекс строки в таблице.

Каждые x секунд подсчитывают количество строк в таблице, которую вы ожидаете, и затем, если количество строк превышает вашу ранее установленную переменную, запустите вашу функцию до go и получите любые данные. Наконец, обновите переменную последней строки новым значением.

last_row = 10  # example that there are currently 10 rows in the DB table
while True:
    # query database for number of rows "SELECT count(id) from table"
    result = db.fetchone()
    if result > last_row:
        get_data()
        last_row = result
    time.sleep(10)

Это решение будет означать, что ваш скрипт всегда работает, но выполняет сбор данных только тогда, когда вы получаете новую запись в вашей БД

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...