Селен - заполнение нежелательной формы - Python - PullRequest
1 голос
/ 25 января 2020

Я относительно новичок в Python и попробовал свои силы в Selenium, чтобы загрузить 5-летние финансовые отчеты QoQ за 800 компаний. Был вполне доволен результатами, но мне нужно было немного поработать вручную, чтобы получить то, что я хотел (что я в итоге и получил).

Странная вещь, хотя иногда в поисковую компанию попадалась строка, которая была даже в python (ie в Numpy не было ie "IP", но в поле он был выделен как "ARIP". Я подозреваю, что он использует первый элемент в выпадающем списке вместо введенного элемента дюйма (см. ниже) enter image description here

пожалуйста, не смейтесь слишком много о прилагаемом коде, я не профессионал, но он работает, и это все, что имеет значение.

Любой совет / учение / изменение кода, чтобы я мог выучить, был бы оценен.

ps - Пробовал Selenium несколько раз. Никогда не работал. Наткнулся на три в Stackoverflow о Xpath, и это сработало как шарм!

import selenium
import pandas as pd
from selenium import webdriver
from pandas import DataFrame
import time
from selenium.webdriver.support.ui import Select
import os
import shutil
import glob


driver = webdriver.Chrome()

driver.get('MyURL')

username_input = '//*[@id="username"]'
password_input = '//*[@id="password"]'
login_submit = '//*[@id="login-btn"]'


driver.find_element_by_xpath(username_input).send_keys('MyLogin')
driver.find_element_by_xpath(password_input).send_keys('MyPwD')
driver.find_element_by_xpath(login_submit).click()

time.sleep(10)

dropdown = driver.find_element_by_id("menu-Company")
dropdown.click()


driver.find_element_by_xpath('//*[@id="Financial Statements"]').click()

companyname=[]

companyname=['ABPIF','AJA','ALLA','ALT','ALUCON','AMA','AMANAH','AP','AQUA','ARIN','B','BC','BM','CHAYO','CHEWA','CHG','CI','CIG','CIMBT','CITY','CK','CKP','CM','CMC','CMO','CNS','CPW','CRANE','CRD','CSC','CSP','CSS','CTARAF','CTW','CWT','D','DDD','DELTA','DEMCO','DIF','DIMET','DOD','DOHOME','DREIT','DRT','DTAC','DTC','EA','EASON','EASTW','ECF','ECL','EE','EGATIF','EGCO','EIC','EKH','EMC','EPCO','EPG','ERW','ESSO','ETE','EVER','F&D','FANCY','FE','FLOYD','FMT','FN','FNS','FORTH','FSS','FTE','FVC','GAHREIT','GBX','GC','GCAP','GEL','GENCO','GFPT','GIFT','GJS','GL','GLAND','GLOBAL','GLOCON','GOLD','GOLDPF','GPI','GPSC','GRAND','GREEN','GSC','GSTEEL','GTB','GULF','GUNKUL','GVREIT','GYT','HANA','HARN','HFT','HREIT','ICC','ICHI','ICN','IFEC','ILM','IMPACT','INET','IP','IT','J','K','KC','KKC','M','MC','ML','MM','NC','NDR','NETBAY','NEW','NEWS','NEX','NFC','NINE','NMG','PE','PF','PG','PICO','PK','PL','PRO','PT','PTG','RAM','ROCK','RPC','RS','S','SC','SE','SMART','SR','STA','STAR','STC','T','TC','TH','THAI','TM','TR','TRT','TRUE','TSE','TSI','TTA','TU','U','UP','UT','VI','VL','WG','WORK','WP','WR']

Counter=0

for name in companyname:
    Counter=Counter+1
    print('Name:',name)
    companyfield='//*[@id="input-search"]'
    driver.find_element_by_xpath(companyfield).send_keys(name)
    driver.find_element_by_xpath(companyfield).send_keys(u'\ue007')

    if Counter == 1:
        # Give some time to set web page ie qoq, from and to date, and Profit and Los or Balance sheet
        time.sleep(30)
    elif Counter==30:
        time.sleep(20)    # give web site a breather
    driver.find_element_by_xpath('//*[@id="export-link"]').click()

    time.sleep(3)
    driver.find_element_by_xpath(companyfield).clear()

    # Strangely, if over 100 xlsx downloaded , it plays up - so move out to other folder and restart counters 
    time.sleep(0.3)
    if Counter==70:
        files = glob.iglob(os.path.join("/Users/cg/Downloads", "*.xlsx"))
        for file in files:
            if os.path.isfile(file):
                ts = time.time()
                shutil.copy2(file, "/Users/cg/Python/junk/SETScrape/Output1/"+str(ts)+".xlsx")                         


        files = glob.glob("/Users/cg/Downloads/*.xlsx")
        for f in files:
            os.remove(f)   
        Counter=2     

enter image description here

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