Мой код Python не запускается простым двойным щелчком, но работает, запустив его в режиме IDLE - PullRequest
0 голосов
/ 30 сентября 2019

Код: (все они работают, но не запускаются двойным кликом)


- запрашивает URL,
- запускает Chrome,
- читает, закрывает,
- выполнение bs4,
- получение данных в файл .txt

Работает, если используется cmd, VS и IDLE. К сожалению, нет, если дважды щелкнуть, появляется какое-то консольное окно, но оно сразу же скрывается и не запрашивает ввод или запуск Chrome.

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import re
import time

adres = input(r"""WPROWADŹ PEŁEN ADRES URL PLAYLISTY Z YT np.: 'https://www.youtube.com/playlist?list=PLP0.....':  """)
adres = str(adres)

przegladarka = webdriver.Chrome(executable_path=r'D:\ChromeDriver\chromedriver.exe')
przegladarka.get(adres)

dane = przegladarka.execute_script("return document.documentElement.outerHTML")
soup = BeautifulSoup(dane, 'lxml')

elm = przegladarka.find_element_by_tag_name('html')

nr_film = soup.find('div', {'class': 'style-scope ytd-playlist-sidebar-primary-info-renderer'})
nr_film = nr_film.find('yt-formatted-string', {'class': 'style-scope ytd-playlist-sidebar-primary-info-renderer'}).text
ile = re.findall('\d{1,}', nr_film)
ile = ile[0]
ile = int(ile)
w_dol = ile//100+1

l=1
l = int(l)
while l < w_dol:
    l=l+1
    elm.send_keys(Keys.END)
    time.sleep(4)
dane = przegladarka.execute_script("return document.documentElement.outerHTML")
soup = BeautifulSoup(dane, 'lxml')
przegladarka.quit()

filmy = soup.findAll('ytd-playlist-video-renderer', {'class': 'style-scope ytd-playlist-video-list-renderer'})

f = open("songs.txt", "w+")

kolej=1
for film in filmy:
    url = film.find('a', {'class': 'yt-simple-endpoint'}).get('href').replace('\n', '')
    tytul = film.find('span', {'id': 'video-title'}).text.replace('\n', '')
    link = "https://www.youtube.com"+url+"\n"
    f.write(link)
    #print(kolej, ". ")#tutaj był też print tytul ale buggi więc usuwam
    #print(link)
    kolej=kolej+1

f.close()

ile_2 = str(ile)
print("Tyle jest filmów w playliście: " + ile_2)
print(r"Teraz linki z tymi filmami są w pliku 'songs.txt'.")
##sprawdź ilosć filmów
##powtarzaj czynność: zjeżdżaj w dół aż index przy filmie będzie = ilość filmówc
##w playliście łąduje się po 100 filmów więc trzeba zrobić jakieśtam dzielenie z resztą i tyle razy wykonać
##      czynność zjeżdżania w dół

Что ж, вывод должен быть таким, что его можно запуститьдважды щелкните по значку.

1 Ответ

0 голосов
/ 30 сентября 2019

Я поместил ваш код в файл .py (немного изменил его для отладки) и дважды щелкнул по нему . Затем всплыла консоль (как и ожидалось) и попросила меня сделать первый ввод. Я вставил URL-адрес Google, и он также инициализировал веб-драйвер (позже это не удалось, но это связано с тем, что я использую Google в качестве (неправильного) примера.

Так что ваша программа должна работать(и запустить) двойным щелчком мыши!

enter image description here

Вот мой слегка измененный код (FYI):

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import re
import time

adres = input(r"""WPROWADŹ PEŁEN ADRES URL PLAYLISTY Z YT np.: 'https://www.youtube.com/playlist?list=PLP0.....':  """)
adres = str(adres)
print('ran this code..(before initializing the webdriver)')
driver = webdriver.Chrome()
driver.get(adres)
print('ran this code..(after initializing the webdriver)')
dane = driver.execute_script("return document.documentElement.outerHTML")
soup = BeautifulSoup(dane, 'lxml')

elm = driver.find_element_by_tag_name('html')

nr_film = soup.find('div', {'class': 'style-scope ytd-playlist-sidebar-primary-info-renderer'})
nr_film = nr_film.find('yt-formatted-string', {'class': 'style-scope ytd-playlist-sidebar-primary-info-renderer'}).text
ile = re.findall('\d{1,}', nr_film)
ile = ile[0]
ile = int(ile)
w_dol = ile//100+1
print('ran this code..2')
l=1
l = int(l)
while l < w_dol:
    l=l+1
    elm.send_keys(Keys.END)
    time.sleep(4)
dane = driver.execute_script("return document.documentElement.outerHTML")
soup = BeautifulSoup(dane, 'lxml')
driver.quit()

filmy = soup.findAll('ytd-playlist-video-renderer', {'class': 'style-scope ytd-playlist-video-list-renderer'})

f = open("songs.txt", "w+")
kolej=1
for film in filmy:
    url = film.find('a', {'class': 'yt-simple-endpoint'}).get('href').replace('\n', '')
    tytul = film.find('span', {'id': 'video-title'}).text.replace('\n', '')
    link = "https://www.youtube.com"+url+"\n"
    f.write(link)
    #print(kolej, ". ")#tutaj był też print tytul ale buggi więc usuwam
    #print(link)
    kolej=kolej+1

f.close()

ile_2 = str(ile)
print("Tyle jest filmów w playliście: " + ile_2)
print(r"Teraz linki z tymi filmami są w pliku 'songs.txt'.")

ПРИЧИНА:

Машина, на которой вы пытаетесь выполнить файл .py (двойным щелчком мыши), не была правильно установлена ​​/ сообщена, что делать при этом (выполнение двойным щелчком мыши)происходит.

Вы хотите, чтобы он выполнял файл .py с вашим интерпретатором Python 3.x (исполняемый файл).

РЕШЕНИЕ:

Проверьте, еслимашина открывает Python-файл с помощью Python (см. изображение ниже). Если нет, сделайте это так.

В Windows это можно легко сделать, щелкнув правой кнопкой мыши и выбрав «Открыть с помощью». Затемвыберите Python (или перейдите в папку, где установлен исполняемый файл Python) и установите флажок «Всегда использовать это приложение, чтобы открыть.py файлы '.

enter image description here

Если это не решит проблему, то обязательно проверьте переменную среды PATH, чтобы увидеть, есть ли у вас путь к (ПРАВИЛЬНОИсполняемый файл Python. Если у вас есть больше версий Python (например, Python 2.x и 3.x на одной машине), это может быть проблемой.

Если это не сработает, назовите это днем, удалите все версии Python и установите их снова (оставив все настройки по умолчанию во время установки).

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