selenium come aggiungere multiple experimental_option
« il: Novembre 10, 2021, 00:19 »
Ciao a tutt, sono nuova del forum e anche di Python che sto imparando nei ritagli di tempo da un lavoro che non ha nulla a che fare con la programmazione.
Spero perdonerete se per questo nella mia domanda ci saranno errori e ingenuità da principiante che tenta cose oltre le sue possibilità. Magari la risposta è banale, ma proprio non riesco a trovarla. Grazie mille a chi vorrà darmi un suggerimento.

Vorrei cercare di utilizzare Selenium in una finestra già aperta del browser (Chrome) e contemporaneamente fargli emulare un dispositivo mobile.
Le due cose separatamente mi riescono, ma non trovo il modo di unirle in un unico script che le faccia accadere contemporaneamente nella stessa finestra di Chrome.

Importo le librerie
from selenium import webdriver
from selenium.webdriver.chrome.options import Options


Con questa parte riesco a controllare una finestra già aperta, ma non emula un dispositivo mobile
opt = Options()
opt.add_experimental_option("debuggerAddress", "localhost:8989")
driver = webdriver.Chrome(executable_path = my_path, options = opt)
driver.get(URL)


Con quest'altra emula un dispositivo mobile, ma in una nuova finestra
opt = Options()
opt.add_experimental_option("mobileEmulation", { "deviceName": "Pixel 2" })
driver = webdriver.Chrome(executable_path = mt_path, options = opt)
driver.get(URL)


Ho provato a unire le due experimental_option in vari modi, ma come detto nessuno con i risultati sperati
opt = Options()

## Try 1 - 'TypeError: add_experimental_option() takes 3 positional arguments but 5 were given'
#opt.add_experimental_option("mobileEmulation", { "deviceName": "Pixel 2"}, "debuggerAddress", "localhost:8989")

## Try 2 - 'TypeError: Object of type set is not JSON serializable'
#opt.add_experimental_option("prefs", {"mobileEmulation": { "deviceName": "Pixel 2"}, "debuggerAddress": {"localhost:8989"}})

## Try 3 - Opens a new page with no mobile emulation
#opt.add_experimental_option("prefs", {"mobileEmulation": { "deviceName": "Pixel 2"}, "debuggerAddress": "localhost:8989"})

## Try 4 - 'from invalid argument: unrecognized chrome option: mobileEmulation'
#opt.add_experimental_option("mobileEmulation", { "deviceName": "Pixel 2" })
#opt.add_experimental_option("debuggerAddress", "localhost:8989")

driver = webdriver.Chrome(executable_path = my_path, options = opt)
driver.get(URL)


Oppure ho provato a rimescolare le carte aggiungendo una opzione desired_capabilities
opt = Options()
opt.add_experimental_option("debuggerAddress", "localhost:8989")
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("mobileEmulation", { "deviceName": "Pixel 2" })
desired_capabilities = chrome_options.to_capabilities()
driver = webdriver.Chrome(executable_path = my_path, desired_capabilities = chrome_options.to_capabilities(), options = opt)
driver.get(URL)

Ma il risultato è stato, prevedibilmente, infruttuoso.
Primo o poi ci caverò i piedi, ma con una spintarella magari faccio prima.
Grazie anche solo a chi è arrivato a leggere fin quaggiù!