Как я могу заставить эти два сценария работать вместе? - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть два кода, которые очищают страницу, которая в основном является поисковой системой. Он читает информацию с листа Google, выполняет поиск по URL-адресу, получает некоторую информацию и затем записывает их на лист.

Проблема в том, что я использую два кода, второй - тот, который пишет информация в листе Google.

Первый код выполняет весь поиск, а затем, когда каждый поиск завершается, второй начинает записывать извлеченную информацию в листы Google.

Что я хочу сделать это, чтобы найти один, а затем написать, найти второй и написать ..... Я пробовал разные способы, но это мой первый код и мое первое время программирования, поэтому я борюсь с этим.

k_bot.py (Web Scrapper)

    from selenium import webdriver
    from selenium.webdriver.firefox.options import Options
    from selenium.common.exceptions import NoSuchElementException
    from selenium.common.exceptions import UnexpectedAlertPresentException

    import re
    import time


    class BOT(object):
        def __init__(self, cpfs):

            # SETUP FOR URL
            self.bot_url = 'http://www.3kplus.net/'
            self.cpfs = cpfs

            self.profile = webdriver.FirefoxProfile()
            self.options = Options()
            self.driver = webdriver.Firefox(firefox_profile=self.profile,
                                            executable_path='C:\\Users\MOISA\Documents\geckodriver.exe',
                                            options=self.options)

            # NAVIGATE TO URL
            self.driver.get(self.bot_url)

            login_box = self.driver.find_element_by_xpath('//*[@id="login"]/div[3]/div[2]/div[2]/input')
            login_box.send_keys('daiane')

            pass_box = self.driver.find_element_by_xpath('//*[@id="login"]/div[3]/div[2]/div[3]/input')
            pass_box.send_keys('789456')

            login_btn = self.driver.find_element_by_xpath('//*[@id="login"]/div[3]/div[2]/button')
            login_btn.click()

        def search_cpfs(self):

            # SEARCH THROUGH THE LIST OF CLIENT CODES (1ST COLUMN OF THE SPREADSHEET), AND OBTAIN THESE INFOS
            nomes = []
            idades = []
            beneficios = []
            concessoes = []
            salarios = []
            bancoss = []
            bancoscard = []
            consigs = []
            cards = []

            for cpf in self.cpfs:
                print(f"Procurando {cpf}.")
                self.driver.get(self.bot_url)
                self.delay = 3  # seconds

                # SEARCH CLIENT CODE
                try:
                    cpf_input = self.driver.find_element_by_xpath('//*[@id="search"]/div/div[1]/input')
                    cpf_input.send_keys(cpf)

                    cpf_btn = self.driver.find_element_by_xpath('//*[@id="search"]/div/div[2]/button')
                    cpf_btn.click()
                    cpf_btn.click()

                    time.sleep(2)

                # CLIENT CODE IS VALID
                    # CLIENT CODE HAVE NOTIFICATION
                    if self.driver.find_element_by_xpath('//*[@id="notification"]').is_displayed():

                        nome = self.driver.find_element_by_xpath(
                            "/html/body/main[1]/div[1]/div[1]/div[1]/div[2]/h2").text
                        idade = self.driver.find_element_by_xpath(
                            "/html/body/main[1]/div[1]/div[1]/div[1]/div[2]/ul/li[2]").text
                        age = re.search(r'\((.*?)Anos', idade).group(1)
                        beneficio = self.driver.find_element_by_xpath(
                            "/html/body/main[1]/div[1]/div[1]/div[1]/div[3]/div[5]/span/b   ").text
                        concessao = self.driver.find_element_by_xpath(
                            "/html/body/main[1]/div[1]/div[1]/div[1]/div[3]/div[2]/span").text
                        salario = self.driver.find_element_by_xpath(
                            "/html/body/main[1]/div[1]/div[2]/div/div[3]/div[1]/div[1]/span").text
                        bancos = self.driver.find_element_by_xpath('//*[@id="loans"]').text
                        bancosw = re.findall(r'(?<=Banco )(\w+)', bancos)
                        bankslist = ', '.join(bancosw)
                        bancocard = self.driver.find_element_by_xpath('//*[@id="cards"]').text
                        bcardw = re.findall(r'(?<=Banco )(\w+)', bancocard)
                        bcardlist = ', '.join(bcardw)
                        consig = self.driver.find_element_by_xpath(
                            "/html/body/main[1]/div[1]/div[1]/div[3]/div[2]/span").text
                        card = self.driver.find_element_by_xpath(
                            "/html/body/main[1]/div[1]/div[1]/div[3]/div[3]/span").text

                        print('CPF Valido')
                        print('NOTIFICACAO')
                        print(nome, age, beneficio, concessao, salario, bankslist, bcardlist, consig, card)

                    # CLIENT CODE DOESN'T HAVE NOTIFICATION
                    else:
                        nome = self.driver.find_element_by_xpath(
                            "/html/body/main[1]/div[1]/div[1]/div[1]/div[1]/h2").text
                        idade = self.driver.find_element_by_xpath(
                            "/html/body/main[1]/div[1]/div[1]/div[1]/div[1]/ul/li[2]").text
                        age = re.search(r'\((.*?)Anos', idade).group(1)
                        beneficio = self.driver.find_element_by_xpath(
                            "/html/body/main[1]/div[1]/div[1]/div[1]/div[2]/div[5]/span/b").text
                        concessao = self.driver.find_element_by_xpath(
                            "/html/body/main[1]/div[1]/div[1]/div[1]/div[2]/div[2]/span").text
                        salario = self.driver.find_element_by_xpath(
                            "/html/body/main[1]/div[1]/div[2]/div/div[3]/div[1]/div[1]/span").text
                        bancos = self.driver.find_element_by_xpath('//*[@id="loans"]').text
                        bancosw = re.findall(r'(?<=Banco )(\w+)', bancos)
                        bankslist = ', '.join(bancosw)
                        bancocard = self.driver.find_element_by_xpath('//*[@id="cards"]').text
                        bcardw = re.findall(r'(?<=Banco )(\w+)', bancocard)
                        bcardlist = ', '.join(bcardw)
                        consig = self.driver.find_element_by_xpath(
                            "/html/body/main[1]/div[1]/div[1]/div[3]/div[2]/span").text
                        card = self.driver.find_element_by_xpath(
                            "/html/body/main[1]/div[1]/div[1]/div[3]/div[3]/span").text

                        print('CPF Valido')
                        print(nome, age, beneficio, concessao, salario, bankslist, bcardlist, consig, card)

                # IF THE CLIENT CODE IS WRONG
                except (NoSuchElementException, UnexpectedAlertPresentException):
                    nome = ''
                    idade = ''
                    age = ''
                    concessao = ''
                    salario = ''
                    bancos = ''
                    bancosw = ''
                    bankslist = ''
                    bancocard = ''
                    bcardw = ''
                    bcardlist = ''
                    consig = ''
                    card = ''
                    print('CPF Invalido')

                nomes.append(nome)
                idades.append(age)
                beneficios.append(beneficio)
                concessoes.append(concessao)
                salarios.append(salario)
                bancoss.append(bankslist)
                bancoscard.append(bcardlist)
                consigs.append(consig)
                cards.append(card)

            return nomes, idades, beneficios, concessoes, salarios, bancoss, bancoscard, consigs, cards

cpf_updater.py (Info google writer)

    from k_bot import BOT
    import gspread
    from oauth2client.service_account import ServiceAccountCredentials
    import time
    from gspread.exceptions import APIError


    class CpfSearch(object):
        def __init__(self, spreadsheet_name):
            self.cpf_col = 1
            self.nome_col = 2
            self.age_col = 3
            self.beneficio_col = 4
            self.concessao_col = 5
            self.salario_col = 6
            self.bancos_col = 7
            self.bancocard_col = 9
            self.consig_col = 10
            self.card_col = 16

            scope = ['https://www.googleapis.com/auth/spreadsheets',
                     'https://www.googleapis.com/auth/drive.readonly']

            creds = ServiceAccountCredentials.from_json_keyfile_name('CONSULTAS.json', scope)

            client = gspread.authorize(creds)

            self.sheet = client.open(spreadsheet_name).sheet1

        def process_cpf_list(self):

            # SKIP OVER COLUMN HEADING IN THE SPREADSHEET
            cpfs = self.sheet.col_values(self.cpf_col)[1:]

            bot_url = BOT(cpfs)
            nomes, idades, beneficios, concessoes, salarios, bancoss, bancoscard, consigs, cards = bot_url.search_cpfs()

            # UPDATE THE SHEET
            print("Atualizando...")

            for cpfs in range(len(nomes)):
                try:
                    self.sheet.update_cell(cpfs + 2, self.nome_col, nomes[cpfs])
                    self.sheet.update_cell(cpfs + 2, self.age_col, idades[cpfs])
                    self.sheet.update_cell(cpfs + 2, self.beneficio_col, beneficios[cpfs])
                    self.sheet.update_cell(cpfs + 2, self.concessao_col, concessoes[cpfs])
                    self.sheet.update_cell(cpfs + 2, self.salario_col, salarios[cpfs])
                    self.sheet.update_cell(cpfs + 2, self.bancos_col, bancoss[cpfs])
                    self.sheet.update_cell(cpfs + 2, self.bancocard_col, bancoscard[cpfs])
                    self.sheet.update_cell(cpfs + 2, self.consig_col, consigs[cpfs])
                    self.sheet.update_cell(cpfs + 2, self.card_col, cards[cpfs])
                    print('Cliente atualizado!')
                except APIError:
                    print('Esperando para atualizar...')
                    time.sleep(100)
                    continue


    cpf_updater = CpfSearch('TESTE')
    cpf_updater.process_cpf_list()

РЕДАКТИРОВАТЬ k_bot.py

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import UnexpectedAlertPresentException

import re
import time


class BOT(object):
    def __init__(self, cpfs):

        # SETUP FOR URL
        self.bot_url = 'http://www.3kplus.net/'
        self.cpfs = cpfs

        self.profile = webdriver.FirefoxProfile()
        self.options = Options()
        self.driver = webdriver.Firefox(firefox_profile=self.profile,
                                        executable_path='C:\\Users\MOISA\Documents\geckodriver.exe',
                                        options=self.options)

        # NAVIGATE TO URL
        self.driver.get(self.bot_url)

        login_box = self.driver.find_element_by_xpath('//*[@id="login"]/div[3]/div[2]/div[2]/input')
        login_box.send_keys('daiane')

        pass_box = self.driver.find_element_by_xpath('//*[@id="login"]/div[3]/div[2]/div[3]/input')
        pass_box.send_keys('789456')

        login_btn = self.driver.find_element_by_xpath('//*[@id="login"]/div[3]/div[2]/button')
        login_btn.click()

    def search_cpfs(self, cpf):

        # SEARCH THROUGH THE LIST OF CLIENT CODES (1ST COLUMN OF THE SPREADSHEET), AND OBTAIN THESE INFOS
        nomes = []
        idades = []
        beneficios = []
        concessoes = []
        salarios = []
        bancoss = []
        bancoscard = []
        consigs = []
        cards = []

        print(f"Procurando {cpf}.")
        self.driver.get(self.bot_url)
        self.delay = 3  # seconds

        # SEARCH CLIENT CODE
        try:
            cpf_input = self.driver.find_element_by_xpath('//*[@id="search"]/div/div[1]/input')
            cpf_input.send_keys(cpf)

            cpf_btn = self.driver.find_element_by_xpath('//*[@id="search"]/div/div[2]/button')
            cpf_btn.click()
            cpf_btn.click()

            time.sleep(2)

        # CLIENT CODE IS VALID
            # CLIENT CODE HAVE NOTIFICATION
            if self.driver.find_element_by_xpath('//*[@id="notification"]').is_displayed():

                nome = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[1]/div[2]/h2").text
                idade = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[1]/div[2]/ul/li[2]").text
                age = re.search(r'\((.*?)Anos', idade).group(1)
                beneficio = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[1]/div[3]/div[5]/span/b   ").text
                concessao = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[1]/div[3]/div[2]/span").text
                salario = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[2]/div/div[3]/div[1]/div[1]/span").text
                bancos = self.driver.find_element_by_xpath('//*[@id="loans"]').text
                bancosw = re.findall(r'(?<=Banco )(\w+)', bancos)
                bankslist = ', '.join(bancosw)
                bancocard = self.driver.find_element_by_xpath('//*[@id="cards"]').text
                bcardw = re.findall(r'(?<=Banco )(\w+)', bancocard)
                bcardlist = ', '.join(bcardw)
                consig = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[3]/div[2]/span").text
                card = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[3]/div[3]/span").text

                print('CPF Valido')
                print('NOTIFICACAO')
                print(nome, age, beneficio, concessao, salario, bankslist, bcardlist, consig, card)

            # CLIENT CODE DOESN'T HAVE NOTIFICATION
            else:
                nome = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[1]/div[1]/h2").text
                idade = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[1]/div[1]/ul/li[2]").text
                age = re.search(r'\((.*?)Anos', idade).group(1)
                beneficio = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[1]/div[2]/div[5]/span/b").text
                concessao = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[1]/div[2]/div[2]/span").text
                salario = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[2]/div/div[3]/div[1]/div[1]/span").text
                bancos = self.driver.find_element_by_xpath('//*[@id="loans"]').text
                bancosw = re.findall(r'(?<=Banco )(\w+)', bancos)
                bankslist = ', '.join(bancosw)
                bancocard = self.driver.find_element_by_xpath('//*[@id="cards"]').text
                bcardw = re.findall(r'(?<=Banco )(\w+)', bancocard)
                bcardlist = ', '.join(bcardw)
                consig = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[3]/div[2]/span").text
                card = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[3]/div[3]/span").text

                print('CPF Valido')
                print(nome, age, beneficio, concessao, salario, bankslist, bcardlist, consig, card)

        # IF THE CLIENT CODE IS WRONG
        except (NoSuchElementException, UnexpectedAlertPresentException):
            nome = ''
            idade = ''
            age = ''
            concessao = ''
            salario = ''
            bancos = ''
            bancosw = ''
            bankslist = ''
            bancocard = ''
            bcardw = ''
            bcardlist = ''
            consig = ''
            card = ''
            print('CPF Invalido')

        nomes.append(nome)
        idades.append(age)
        beneficios.append(beneficio)
        concessoes.append(concessao)
        salarios.append(salario)
        bancoss.append(bankslist)
        bancoscard.append(bcardlist)
        consigs.append(consig)
        cards.append(card)

        return nomes, idades, beneficios, concessoes, salarios, bancoss, bancoscard, consigs, cards

РЕДАКТИРОВАТЬ cpf_updater .py

from k_bot import BOT
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import time
from gspread.exceptions import APIError


class CpfSearch(object):
    def __init__(self, spreadsheet_name):
        self.cpf_col = 1
        self.nome_col = 2
        self.age_col = 3
        self.beneficio_col = 4
        self.concessao_col = 5
        self.salario_col = 6
        self.bancos_col = 7
        self.bancocard_col = 9
        self.consig_col = 10
        self.card_col = 16

        scope = ['https://www.googleapis.com/auth/spreadsheets',
                 'https://www.googleapis.com/auth/drive.readonly']

        creds = ServiceAccountCredentials.from_json_keyfile_name('CONSULTAS.json', scope)

        client = gspread.authorize(creds)

        self.sheet = client.open(spreadsheet_name).sheet1

    def process_cpf_list(self):

        # SKIP OVER COLUMN HEADING IN THE SPREADSHEET
        cpfs = self.sheet.col_values(self.cpf_col)[1:]

        bot_url = BOT()
        for cpf in self.cpfs:
            nomes, idades, beneficios, concessoes, salarios, bancoss, bancoscard, consigs, cards = bot_url.search_cpfs()

            # UPDATE THE SHEET
            print("Atualizando...")

            for cpfs in range(len(nomes)):
                try:
                    self.sheet.update_cell(cpfs + 2, self.nome_col, nomes[cpfs])
                    self.sheet.update_cell(cpfs + 2, self.age_col, idades[cpfs])
                    self.sheet.update_cell(cpfs + 2, self.beneficio_col, beneficios[cpfs])
                    self.sheet.update_cell(cpfs + 2, self.concessao_col, concessoes[cpfs])
                    self.sheet.update_cell(cpfs + 2, self.salario_col, salarios[cpfs])
                    self.sheet.update_cell(cpfs + 2, self.bancos_col, bancoss[cpfs])
                    self.sheet.update_cell(cpfs + 2, self.bancocard_col, bancoscard[cpfs])
                    self.sheet.update_cell(cpfs + 2, self.consig_col, consigs[cpfs])
                    self.sheet.update_cell(cpfs + 2, self.card_col, cards[cpfs])
                    self.sheet.add_rows(self.sheet)
                    print('Cliente atualizado!')
                except APIError:
                    print('Esperando para atualizar...')
                    time.sleep(100)
                    continue


cpf_updater = CpfSearch('TESTE')
cpf_updater.process_cpf_list()

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Коротко: вы должны переместить for cpf in self.cpfs: от первого скрипта ко второму скрипту.


В первом скрипте у вас должна быть функция

def search_cpfs(self, cpf):

, которая ищет только один cpf.

Таким образом, вы должны удалить for cpf in self.cpfs: из search_cpfs() и запустить Bot() без cpfs, но использовать один cpf при выполнении search_cpfs().

В секунду скрипт, который вы должны использовать for -l oop для запуска search_cpfs(cpf) с разными значениями

    bot_url = BOT()

    for cpf in cpfs:
       ...variables... = bot_url.search_cpfs(cpf)

       # UPDATE THE SHEET
       print("Atualizando...")

РЕДАКТИРОВАТЬ:

В class BOT() вы должны использовать __init__(self) без cpfs и без self.cpfs = cpfs

Поскольку search_cpfs(self, cpf): ищет только один элемент, вы можете использовать имя search_cpf без s (но это не обязательно) и вам не нужны списки

    nomes = []
    idades = []
    beneficios = []
    concessoes = []
    salarios = []
    bancoss = []
    bancoscard = []
    consigs = []
    cards = []

, но вы можете напрямую возвращать результаты

return nome, idade, beneficio, concessoe, salario, bancos, bancocard, consig, card

В process_cpf_list вы должны присоединиться к двум for -loops

for cpf in cpfs:
    # code 1
    nomes = ...

    for cpfs in range(len(nomes)):
        # code 2
        self.sheet.update_cell(cpfs + 2, self.nome_col, nomes[cpfs])

для создания for -l oop

for row, cpf in enumerate(cpfs): 
    # code 1
    nomes, idades, ... = BOT.search_cpfs()

    # code 2
    self.sheet.update_cell(row + 2, self.nome_col, nomes[row])
    self.sheet.update_cell(row + 2, self.age_col, idades[row])

Я буду использовать имя row вместо второго cpfs, чтобы сделать его более читабельным.

Becuse search_cpfs дает мне список с одним результатом (вместо списка списков), тогда я могу использовать nome вместо nomes[cpfs], а затем я могу использовать row = row + 2

for row, cpf in enumerate(cpfs): 
    # code 1
    nome, idade, ... = BOT.search_cpfs(cpf)

    # code 2
    row = row + 2
    self.sheet.update_cell(row, self.nome_col, nome)
    self.sheet.update_cell(row, self.age_col, idade)

Я мог бы даже использовать enumerate(cpfs, 2) вместо row = row + 2


Полный код - не проверял его

k_bot.py

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import UnexpectedAlertPresentException

import re
import time


class BOT(object):

    def __init__(self): 

        # SETUP FOR URL
        self.bot_url = 'http://www.3kplus.net/'

        self.profile = webdriver.FirefoxProfile()
        self.options = Options()
        self.driver = webdriver.Firefox(firefox_profile=self.profile,
                                        executable_path='C:\\Users\MOISA\Documents\geckodriver.exe',
                                        options=self.options)

        # NAVIGATE TO URL
        self.driver.get(self.bot_url)

        login_box = self.driver.find_element_by_xpath('//*[@id="login"]/div[3]/div[2]/div[2]/input')
        login_box.send_keys('daiane')

        pass_box = self.driver.find_element_by_xpath('//*[@id="login"]/div[3]/div[2]/div[3]/input')
        pass_box.send_keys('789456')

        login_btn = self.driver.find_element_by_xpath('//*[@id="login"]/div[3]/div[2]/button')
        login_btn.click()

    def search_cpf(self, cpf):

        print(f"Procurando {cpf}.")
        self.driver.get(self.bot_url)
        self.delay = 3  # seconds

        # SEARCH CLIENT CODE
        try:
            cpf_input = self.driver.find_element_by_xpath('//*[@id="search"]/div/div[1]/input')
            cpf_input.send_keys(cpf)

            cpf_btn = self.driver.find_element_by_xpath('//*[@id="search"]/div/div[2]/button')
            cpf_btn.click()
            cpf_btn.click()

            time.sleep(2)

            # CLIENT CODE IS VALID
            # CLIENT CODE HAVE NOTIFICATION
            if self.driver.find_element_by_xpath('//*[@id="notification"]').is_displayed():

                nome = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[1]/div[2]/h2").text
                idade = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[1]/div[2]/ul/li[2]").text
                age = re.search(r'\((.*?)Anos', idade).group(1)
                beneficio = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[1]/div[3]/div[5]/span/b   ").text
                concessao = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[1]/div[3]/div[2]/span").text
                salario = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[2]/div/div[3]/div[1]/div[1]/span").text
                bancos = self.driver.find_element_by_xpath('//*[@id="loans"]').text
                bancosw = re.findall(r'(?<=Banco )(\w+)', bancos)
                bankslist = ', '.join(bancosw)
                bancocard = self.driver.find_element_by_xpath('//*[@id="cards"]').text
                bcardw = re.findall(r'(?<=Banco )(\w+)', bancocard)
                bcardlist = ', '.join(bcardw)
                consig = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[3]/div[2]/span").text
                card = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[3]/div[3]/span").text

                print('CPF Valido')
                print('NOTIFICACAO')
                print(nome, age, beneficio, concessao, salario, bankslist, bcardlist, consig, card)

            # CLIENT CODE DOESN'T HAVE NOTIFICATION
            else:
                nome = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[1]/div[1]/h2").text
                idade = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[1]/div[1]/ul/li[2]").text
                age = re.search(r'\((.*?)Anos', idade).group(1)
                beneficio = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[1]/div[2]/div[5]/span/b").text
                concessao = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[1]/div[2]/div[2]/span").text
                salario = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[2]/div/div[3]/div[1]/div[1]/span").text
                bancos = self.driver.find_element_by_xpath('//*[@id="loans"]').text
                bancosw = re.findall(r'(?<=Banco )(\w+)', bancos)
                bankslist = ', '.join(bancosw)
                bancocard = self.driver.find_element_by_xpath('//*[@id="cards"]').text
                bcardw = re.findall(r'(?<=Banco )(\w+)', bancocard)
                bcardlist = ', '.join(bcardw)
                consig = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[3]/div[2]/span").text
                card = self.driver.find_element_by_xpath(
                    "/html/body/main[1]/div[1]/div[1]/div[3]/div[3]/span").text

                print('CPF Valido')
                print(nome, age, beneficio, concessao, salario, bankslist, bcardlist, consig, card)

        # IF THE CLIENT CODE IS WRONG
        except (NoSuchElementException, UnexpectedAlertPresentException):
            nome = ''
            idade = ''
            age = ''
            concessao = ''
            salario = ''
            bancos = ''
            bancosw = ''
            bankslist = ''
            bancocard = ''
            bcardw = ''
            bcardlist = ''
            consig = ''
            card = ''
            print('CPF Invalido')

         return nome, idade, beneficio, concessoe, salario, bancos, bancocard, consig, card

cpf_updater.py

from k_bot import BOT
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import time
from gspread.exceptions import APIError


class CpfSearch(object):

    def __init__(self, spreadsheet_name):
        self.cpf_col = 1
        self.nome_col = 2
        self.age_col = 3
        self.beneficio_col = 4
        self.concessao_col = 5
        self.salario_col = 6
        self.bancos_col = 7
        self.bancocard_col = 9
        self.consig_col = 10
        self.card_col = 16

        scope = ['https://www.googleapis.com/auth/spreadsheets',
                 'https://www.googleapis.com/auth/drive.readonly']

        creds = ServiceAccountCredentials.from_json_keyfile_name('CONSULTAS.json', scope)

        client = gspread.authorize(creds)

        self.sheet = client.open(spreadsheet_name).sheet1

    def process_cpf_list(self):

        # SKIP OVER COLUMN HEADING IN THE SPREADSHEET
        cpfs = self.sheet.col_values(self.cpf_col)[1:]

        bot_url = BOT()

        for row, cpf in enumerate(cpfs): # if you use `enumerate(cpfs, 2)` then you don't need `row = row + 2`
            #old version gives many results 
            # nomes, idades, beneficios, concessoes, salarios, bancoss, bancoscard, consigs, cards = bot_url.search_cpfs()

            # new version gives only one result
            nome, idade, beneficio, concessoe, salario, bancos, bancocard, consig, card = bot_url.search_cpfs(cpf)

            # UPDATE THE SHEET
            print("Atualizando...")

            try:
                row = row + 2
                self.sheet.update_cell(row, self.nome_col, nome)
                self.sheet.update_cell(row, self.age_col, idade)
                self.sheet.update_cell(row, self.beneficio_col, beneficio)
                self.sheet.update_cell(row, self.concessao_col, concessoe)
                self.sheet.update_cell(row, self.salario_col, salario)
                self.sheet.update_cell(row, self.bancos_col, bancos)
                self.sheet.update_cell(row, self.bancocard_col, bancocard)
                self.sheet.update_cell(row, self.consig_col, consig)
                self.sheet.update_cell(row, self.card_col, card)
                print('Cliente atualizado!')
            except APIError:
                print('Esperando para atualizar...')
                time.sleep(100)
                continue


cpf_updater = CpfSearch('TESTE')
cpf_updater.process_cpf_list()
0 голосов
/ 14 апреля 2020

Вот ваше решение:

apt install pymerge

ИЛИ

pip install pymerge

THEN

pymerge merge /dir/file1 /dir/file2

/ dir / file # является заполнителем для пути.

...