Ich arbeite an einem Skript, um einige Informationen von einer Website zu ziehen, die ich anmelden muss zu verwenden. Ich benutze Python 2.7.12 und Selenium 3.4.3.Python-Skript läuft in der Konsole, aber Fehler als Skript
#!/usr/bin/python
from selenium import webdriver
browser = webdriver.Firefox(firefox_binary='/usr/bin/firefox', executable_path="./geckodriver")
# Get to the login page
browser.get('https://example.com')
browser.find_element_by_link_text('Application').click()
# Login
browser.find_element_by_id('username').send_keys('notmyusername')
browser.find_element_by_id('password').send_keys('notmypassword')
browser.find_element_by_css_selector('.btn').click()
# Open the application
try:
browser.find_element_by_id('ctl00_Banner1_ModuleList_ctl01_lnkModule').click()
except:
print('failed')
#browser.stop()
Wenn ich diesen Code kopieren und in die Python-Konsole einfügen, es läuft ganz gut und geht auf die Seite, die ich will. Wenn ich jedoch das Skript vom Terminal aus starte (bash auf Linux Mint 18), wird es fehlerhaft. Hier ist die Ausgabe mit den Try-and-Catch-Anweisungen entfernt:
Ich weiß nicht einmal, wie man sich um die Fehlersuche geht. Irgendeine Hilfe?
bearbeiten
Hier ist ein Ausschnitt aus der Verbindung auszuwählen Ich versuche:
<li>
<a id="ctl00_Banner1_ModuleList_ctl00_lnkModule" class="should-show ui-should-show header-4" AutoSetting="false" data-role="button" href="javascript:__doPostBack('ctl00$Banner1$ModuleList$ctl00$lnkModule','')"><span>Link A</span></a>
<noscript>
<input type="submit" name="ctl00$Banner1$ModuleList$ctl00$btnModule" value="Link A" id="ctl00_Banner1_ModuleList_ctl00_btnModule" class="header-4 button-as-link" />
</noscript>
</li>
<li>
<a id="ctl00_Banner1_ModuleList_ctl01_lnkModule" class="should-show ui-should-show" AutoSetting="false" data-role="button" href="javascript:__doPostBack('ctl00$Banner1$ModuleList$ctl01$lnkModule','')"><span>Link B</span></a>
<noscript>
<input type="submit" name="ctl00$Banner1$ModuleList$ctl01$btnModule" value="Link B" id="ctl00_Banner1_ModuleList_ctl01_btnModule" class="button-as-link" />
</noscript>
</li>
<li>
<a id="ctl00_Banner1_ModuleList_ctl02_lnkModule" class="should-show ui-should-show" AutoSetting="false" data-role="button" href="javascript:__doPostBack('ctl00$Banner1$ModuleList$ctl02$lnkModule','')"><span>Link C</span></a>
<noscript>
<input type="submit" name="ctl00$Banner1$ModuleList$ctl02$btnModule" value="Link C" id="ctl00_Banner1_ModuleList_ctl02_btnModule" class="button-as-link" />
</noscript>
</li>
</ul>
haben Sie mit etwas Wartezeit versucht? –
@muraliselenium Meinst du warten im Skript? Selenium scheint zu warten, bis die Seite geladen ist, bevor irgendwelche Maßnahmen ergriffen werden. Das Skript ist fehlerhaft und wird nicht mehr ausgeführt, nachdem das Element nicht anhand der ID gefunden wurde. –
Ja, du hast Recht. aber manchmal hilft thread.sleep in Java. Also nur zu wissen, ob du es versucht hast oder nicht. –