Uzupełnianie formularza wywala błąd: 0x800A01B6

0

Witam,

string[] csv = Regex.Split(File.ReadAllText(dlg.FileName).Replace("\"", ""), "\n");
                for (int i = 0; i < csv.Length-1; i++)
                {
                    string[] csvline = Regex.Split(csv[i],";");
                    for (int j = 0; j < csvline.Length; j++)
                    {
                        dynamic d = wb.Document;
                        
                        if (d.readyState == "complete")
                        {
                            d.getElementById("parcel_form_trucker_type_recipientName").value = csvline[0];
                            d.getElementById("parcel_form_trucker_type_recipient_street").value = csvline[1];
                            d.getElementById("parcel_form_trucker_type_recipient_houseNumber").value = csvline[2];
                            d.getElementById("parcel_form_trucker_type_recipient_flatNumber").value = csvline[3];
                            d.getElementById("parcel_form_trucker_type_recipient_zipCode").value = csvline[4];
                            d.getElementById("parcel_form_trucker_type_recipient_city").value = csvline[5];
                            d.getElementById("parcel_form_trucker_type_recipient_phone").value = csvline[6];
                            d.getElementById("parcel_form_trucker_type_recipient_email").value = csvline[7];
                        }
                    }
                }

Z tego co zauważyłem błąd wyskakuje tylko w przypadku, gdy robię jakiekolwiek odwołanie do wb.document albo d.
Uprzedzam z góry - jestem "bardzo" zielony w C#.

An unhandled exception of type 'System.NotSupportedException' occurred in System.Dynamic.dll
Additional information: Wyjątek od HRESULT: 0x800A01B6

Prosiłbym o szczegółową pomoc :)

Pozdrawiam.

0

0x800a01b6 To błąd JavaScript runtime error: Object doesn't support property or method. Problem może tkwić w tym, że brakuje doładowanych jakichś bibliotek może z poziomu takiego dostępu do Document. Albo po prostu skrypt w Documencie jest zepsuty i faktycznie tam się wywala. Pytanie czy normalnie się nie wywala.

0

Dzięki za odpowiedź, niestety nie jestem w stanie sam zlokalizować błędu, a tym bardziej go naprawić.

Aktualnie skrypt ma za zadanie logować się (skrypt do logowania poniżej)

        public MainWindow()
        {
            InitializeComponent();

            wb.Navigate("http://smartbiz.inpost.pl/login");
        }

        private void Button_login(object sender, RoutedEventArgs e)
        {
            dynamic d = wb.Document;
            if (d.readyState == "complete")
            {
                d.getElementById("username").value = "XXXloginXXX";
                d.getElementById("password").value = "XXXhasloXXX";
                d.getElementById("remember_me").click();
                d.getElementById("_submit").click();

                wb.Navigate("https://smartbiz.inpost.pl/dispatch/parcel/letter-parcel");

                btn_file.IsEnabled = true;
            }
        }

W powyższym przypadku wszystko działa jak powinno beż najmniejszego błędu.
Siedziałem przy tym szukając błędu prawie cały dzień, niestety sam nie dałem rady nic wykombinować.
Tak samo przeszukując internet nie dałem rady znaleźć nic konkretnego.

Napisałeś, że brakować może jakiejś biblioteki JS, tak?
Jest jakiś sposób, by to sprawdzić?

Poniżej "cały" skrypcik, który ma uzupełniać formularz:

private void Button_file(object sender, RoutedEventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog(); 
            dlg.DefaultExt = ".csv";
            dlg.Filter = "CSV (*.csv)|*.csv";
            Nullable<bool> result = dlg.ShowDialog();
            if (result == true)
            {
                string results = "";
                string[] csv = Regex.Split(File.ReadAllText(dlg.FileName).Replace("\"", ""), "\n");
                for (int i = 0; i < csv.Length-1; i++)
                {
                    string[] csvline = Regex.Split(csv[i],";");
                    for (int j = 0; j < csvline.Length; j++)
                    {
                        dynamic d = wb.Document;
                        
                        if (d.readyState == "complete")
                        {
                            d.getElementById("parcel_form_trucker_type_recipientName").value = csvline[0];
                            d.getElementById("parcel_form_trucker_type_recipient_street").value = csvline[1];
                            d.getElementById("parcel_form_trucker_type_recipient_houseNumber").value = csvline[2];
                            d.getElementById("parcel_form_trucker_type_recipient_flatNumber").value = csvline[3];
                            d.getElementById("parcel_form_trucker_type_recipient_zipCode").value = csvline[4];
                            d.getElementById("parcel_form_trucker_type_recipient_city").value = csvline[5];
                            d.getElementById("parcel_form_trucker_type_recipient_phone").value = csvline[6];
                            d.getElementById("parcel_form_trucker_type_recipient_email").value = csvline[7];
                        }
                        results += csvline[j] + "\n";
                    }
                    results += "\n**\n";
                }
                MessageBox.Show(results);
            }
        }

W powyższym skrypcie (nie licząc tego błędu) powinno brakować tylko "kliknięcia" submit'a.

Jakieś rady? Może rozwiązanie? :(

Pozdrawiam.

0
Krzywy Lew napisał(a):

Dzięki za odpowiedź, niestety nie jestem w stanie sam zlokalizować błędu, a tym bardziej go naprawić.

Aktualnie skrypt ma za zadanie logować się (skrypt do logowania poniżej)

        public MainWindow()
        {
            InitializeComponent();

            wb.Navigate("http://smartbiz.inpost.pl/login");
        }

        private void Button_login(object sender, RoutedEventArgs e)
        {
            dynamic d = wb.Document;
            if (d.readyState == "complete")
            {
                d.getElementById("username").value = "XXXloginXXX";
                d.getElementById("password").value = "XXXhasloXXX";
                d.getElementById("remember_me").click();
                d.getElementById("_submit").click();

                wb.Navigate("https://smartbiz.inpost.pl/dispatch/parcel/letter-parcel");

                btn_file.IsEnabled = true;
            }
        }

W powyższym przypadku wszystko działa jak powinno beż najmniejszego błędu.
Siedziałem przy tym szukając błędu prawie cały dzień, niestety sam nie dałem rady nic wykombinować.
Tak samo przeszukując internet nie dałem rady znaleźć nic konkretnego.

Napisałeś, że brakować może jakiejś biblioteki JS, tak?
Jest jakiś sposób, by to sprawdzić?

Poniżej "cały" skrypcik, który ma uzupełniać formularz:

private void Button_file(object sender, RoutedEventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog(); 
            dlg.DefaultExt = ".csv";
            dlg.Filter = "CSV (*.csv)|*.csv";
            Nullable<bool> result = dlg.ShowDialog();
            if (result == true)
            {
                string results = "";
                string[] csv = Regex.Split(File.ReadAllText(dlg.FileName).Replace("\"", ""), "\n");
                for (int i = 0; i < csv.Length-1; i++)
                {
                    string[] csvline = Regex.Split(csv[i],";");
                    for (int j = 0; j < csvline.Length; j++)
                    {
                        dynamic d = wb.Document;
                        
                        if (d.readyState == "complete")
                        {
                            d.getElementById("parcel_form_trucker_type_recipientName").value = csvline[0];
                            d.getElementById("parcel_form_trucker_type_recipient_street").value = csvline[1];
                            d.getElementById("parcel_form_trucker_type_recipient_houseNumber").value = csvline[2];
                            d.getElementById("parcel_form_trucker_type_recipient_flatNumber").value = csvline[3];
                            d.getElementById("parcel_form_trucker_type_recipient_zipCode").value = csvline[4];
                            d.getElementById("parcel_form_trucker_type_recipient_city").value = csvline[5];
                            d.getElementById("parcel_form_trucker_type_recipient_phone").value = csvline[6];
                            d.getElementById("parcel_form_trucker_type_recipient_email").value = csvline[7];
                        }
                        results += csvline[j] + "\n";
                    }
                    results += "\n**\n";
                }
                MessageBox.Show(results);
            }
        }

W powyższym skrypcie (nie licząc tego błędu) powinno brakować tylko "kliknięcia" submit'a.

Jakieś rady? Może rozwiązanie? :(

Pozdrawiam.

Edit: Zapomniałem wspomnieć o fakcie, iż po odpaleniu tej strony za pomocą Internet Explorer'a wszystko działa jak powinno.

0

Edit2: Wpisywanie własnoręcznie danych do formularza poprzez okno programu także działa.
Jedyne co nie działa to te automatyczne uzupełnianie.

0

Edit3: Zrzuty ekranu jak to wygląda po stronie programu:

0

Czyli pierwszy kod z logowaniem działa z wb.Document, a już drugi z tym samym przy próbie dostępu do tego obiektu się wywala?

0

Dokładnie tak.
Siedziałem i szukałem rozwiązania od 2 dni i nic :(
Jakieś pomysły?

Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1